Seja bem vindo ao repositório do Projeto de Fluxo de Caixa para o desafio técnico da vaga de Desenvolvedor Backend Senior no Carrefour.
O objetivo desta aplicação é realizar o controle de lançamentos de crédito e débito de um comércio como também as informações de saldo consolidado dos mesmos.
-
Esta aplicação segue um padrão de microserviço utilizando o framework NestJs e Messageria com Kafka.
-
Decorators, Strategies e Guards como Design Patterns.
-
Arquitetura MVC
-
Testes Unitários
-
Autenticação via token JWT
Outras bibliotecas utilizadas:
- Helmet
- Bcrypt
Banco de dados:
- PostgreSQL
- MongoDB
Para iniciar o projeto é necessário obter o Docker na sua máquina, e para usá-lo é necessário o Postman
Definir um arquivo .env (Há um arquivo .env.example que já possui as infos de teste para o projeto apenas o renomeie para .env)
Toda a instalação de bibliotecas, node, banco de dados, etc, será orquestrado pelo docker, basta utilizar o terminal ou shell e navegar até a pasta do repositório clonado do projeto e produzir o seguinte comando:
$ docker-compose up --build
Para testar as rotas, basta importar o arquivo Carrefour-Challenge.postman_collection.json no Postman, lá haverá as seguintes rotas:
-
Login
-
CreateTransaction
-
GetBalance
Rotas previamente configuradas, atente-se apenas obter o token na rota de Login e enviá-lo nas requisições de criação e obtenção do saldo consolidado.
-
-
Método: POST
-
Body: { "email": "[email protected]", "password": "senhafulano" }
-
Response (200): {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e..."}
-
Response (401): { "statusCode": 401, "message": "Credenciais Inválidas.", "error": "Unauthorized" }
-
-
-
Método: POST
-
Body: {"accountId: number, "type": "crédito" || "débito", "amount": number, "description": "string"}
-
Response (201): Created
-
Response (401): { "statusCode": 401, "message": "Credenciais Inválidas.", "error": "Unauthorized" }
-
Response (400): { "statusCode": 400, "message": [ "Erro na requisição" ], "error": "Bad Request" }
-
-
-
Método: GET
-
Body: {"accountId": number, "date": "DD/MM/YYYY"}
-
Response (200): { "accountId": 100, "date": "2023-05-15T00:00:00.000Z", "amount": 801.05 }
-
Response (400): { "statusCode": 400, "message": [ "Erro na Requisição" ], "error": "Bad Request" }
-
Response (401): { "statusCode": 401, "message": "Credenciais Inválidas.", "error": "Unauthorized" }
-
# test coverage
$ npm run test:cov