- Notifications
You must be signed in to change notification settings - Fork0
MatheusMangueira/microservice-easy-transfer
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Recursos disponíveis para acesso via API:
- Resumo Geral do Projeto
- Regras de Negócio
- Tecnologias Utilizadas
- Métodos
- Respostas
- Listar
- Usuários
- Transfêrencia
Este projeto consiste em um sistema de transferência de valores, desenvolvido com a arquitetura de microserviços, composto por três microserviços interconectados. Lembrando que a comunicação entre nossos microsserviços é efetuada viaRabbitMQ
🟢 Microserviço de Usuário:
Este microserviço foi criado com Spring Boot, Java na sua versão 21 e é responsável por gerenciar as informações dos usuários, incluindo nome, email e saldo disponível em sua conta. Ao ser instanciado, o microserviço realiza a criação da fila de transferência utilizandoRabbitMQ. Essa fila será utilizada para enviar os dados necessários para o serviço de transferência.
🟢 Microserviço de Transferência:
O microserviço de transferência foi criado com Spring Boot, Java na sua versão 21. Esse serviço recebe e processa as solicitações de transferência dos usuários, calcula o valor da transação e assegura a integridade das operações. Após a conclusão, retorna informações relevantes sobre a transação para o usuário através da fila ```transferUserBack-row```, que é consumida pelo microserviço de usuários para atualização do banco de dados. Essa abordagem assíncrona garante eficiência e escalabilidade, mantendo a operação do sistema suave e confiável.
🟢 Microserviço de Notificação:
Este microserviço foi realizado com NodeJs e é responsável por enviar notificações por e-mail aos destinatários de uma transferência de valores. Ele é acionado após a conclusão de uma transferência bem-sucedida e envia uma mensagem de notificação para o destinatário, informando sobre a transação.
- O usuário poderá realizar uma transferência de valor para um destinatário.
- A transferência ocorrerá subtraindo o valor da conta do usuário que solicitou a transferência e adicionando-o à conta do usuário destinatário.
- A notificação enviará um e-mail para o e-mail do usuário com o e-mail do remetente e do destinatário, assim como o valor da transferência.
- O sistema está desenhado da seguinte forma:
microservice-users | microservice-transfer | microservice-notification |
---|---|---|
✅ Spring Boot | ✅ Spring Boot | ✅ NodeJs |
✅ Docker | ✅ Java 21 | ✅ Typescript |
✅ RabbitMq | ✅ Docker | ✅ RabbitMq |
✅ PostgreSQL | ✅ RabbitMq | ✅ Docker |
✅ JPA | ✅ PostgreSQL | ✅ Nodemailer |
✅ Validation | ✅ JPA | - |
✅ Lombok | ✅ Lombok | - |
✅ Java 21 | - | - |
- Para testar a API, Faça um clone do repósitoriohttps://github.com/MatheusMangueira/microservice-easy-transfer.git
- Configure as variaveis de ambiente de acordo com o arquivo
.env.example
de cada microserviço. - Configure o docker conforme o especificado noDocker.
- Acessehttp://localhost:8080 para o
microserviço de usres
- Acessehttp://localhost:9090 para o
microserviço de transfer
- Acessehttp://localhost:3000 para o
microserviço de notification
- Aceesehttp://localhost:15672 para o
Login do RabbitMq
conforme suas credenciais
- Na raiz do projeto vá até o diretório
devops/docker/docker-compose.yml
e atente-se as variáveis de ambiente (ENV). - Inicialize os serviços com o comando
docker-compose up
assim você irá executar a aplicação.
- OBS: Irá inicializar o serviços do
rabbitmq | ports: - "5432:5432"
postgres-user | ports: - "5432:5432"
postgres-transfer | ports: - "5433:5432"
< PROJECT ROOT>|-- devops/# devops||-- docker/||-- docker-compose.yml# Docker||-- .env.example# arquivo ENV de exemplo||-- librabbitmq# lib BTOs|-- microservice-notification# microserviço de notificação|-- microservice-transfer# microserviço de transferencia|-- microservice-users# microserviço de usuario||--*************************************************
Requisições para a API devem seguir os padrões:
Método | Descrição |
---|---|
GET | Retorna informações de um ou mais registros. |
POST | Utilizado para criar um novo registro. |
PUT | Atualiza dados de um registro ou altera sua situação. |
DELETE | Remove um registro do sistema. |
Código | Descrição |
---|---|
200 | Requisição executada com sucesso (success). |
400 | Erros de validação ou os campos informados não existem no sistema. |
401 | Dados de acesso inválidos. |
404 | Registro pesquisado não encontrado (Not found). |
405 | Método não implementado. |
410 | Registro pesquisado foi apagado do sistema e não esta mais disponível. |
422 | Dados informados estão fora do escopo definido para o campo. |
429 | Número máximo de requisições atingido. (aguarde alguns segundos e tente novamente) |
500 | Internal Sesrver Error. |
As ações delistar todos (GET)
permitem o envio dos seguintes parâmetros:
Parâmetro | Descrição |
---|---|
limit | Filtra dados pelo valor informado. |
page | Informa qual página deve ser retornada. |
Request (application/json)
- Parameters
- page: 1
- limit: 10
- Parameters
Response 200 (application/json)
[{ "id": "295083bf-9484-498f-95b4-5fa658c9f052", "name": "teste01", "email": "teste01@example.com", "balance": 1000.00}]
Response 500 (application/json)
{ message: 'Internal Server Error'}
Request (application/json)
Response 200 (application/json)
{ "id": "295083bf-9484-498f-95b4-5fa658c9f052", "name": "teste01", "email": "teste01@example.com", "balance": 1000.00}
Response 500 (application/json)
{ message: 'Internal Server Error'}
Request (application/json)
Body
{ "balance": 5000.00}
Response 200 (application/json)
{ "id": "295083bf-9484-498f-95b4-5fa658c9f052", "name": "teste01", "email": "teste01@example.com", "balance": 5000.00}
Response 500 (application/json)
{ message: 'Internal Server Error'}
Request (application/json)
Body
{ "name": "teste01", "email": "teste01@example.com", "balance": 5000.00}
Response 201 (application/json)
{ "id": "295083bf-9484-498f-95b4-5fa658c9f052", "name": "teste01", "email": "teste01@example.com", "balance": 5000.00}
Response 500 (application/json)
{ message: 'Internal Server Error'}
Request (application/json)
Response 204 (application/json)
- No body returned for response
Response 500 (application/json)
{ message: 'Internal Server Error'}
Request (application/json)
Response 200 (application/json)
Body
{ "senderID": { "id": "1f9c18d7-5308-4951-bb84-000d2806a2d5", "name": "teste01", "email": "teste01@hotmail.com", "balance": 5100.00 }, "recipientID": { "id": "122020e5-7641-468e-9afd-fdb4144ee3a8", "name": "teste02", "email": "teste02@hotmail.com", "balance": 1000.00 }, "value": 1000.00}
Response 500 (application/json)
{ message: 'Internal Server Error'}
Request (application/json)
- Parameters
- page: 1
- limit: 10
- Parameters
Response 200 (application/json)
[ { "id": "d18d5a69-c057-42a2-a441-6c06b3a2d9e5", "senderID": "d41c7c88-7697-44ea-9738-0d96e45c39e1", "recipientID": "9b33bfb3-1452-485e-9d66-9a22bd64ca67", "value": 500.00 }]
Response 500 (application/json)
{ message: 'Internal Server Error' }
Request (application/json)
Response 200 (application/json)
{ "id": "d18d5a69-c057-42a2-a441-6c06b3a2d9e5", "senderID": "d41c7c88-7697-44ea-9738-0d96e45c39e1", "recipientID": "9b33bfb3-1452-485e-9d66-9a22bd64ca67", "value": 500.00 }
Response 500 (application/json)
{ message: 'Internal Server Error' }
About
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.