Este projeto implementa uma versão simplificada do sistema de pagamentos, onde usuários e lojistas podem realizar transferências de dinheiro entre si. A aplicação inclui validações como saldo suficiente, transações atômicas, e notificações em tempo real para recebimentos.
Foi desenvolvido com as seguintes tecnologias:
- NestJS: Framework para a criação de APIs RESTful.
- MySQL: Banco de dados relacional para armazenamento dos dados de usuários e transações.
- Redis: Utilizado para FIFO (First In, First Out) e cache de operações de transferências.
- Docker: Para containerização da aplicação, facilitando o deploy e a configuração do ambiente.
- Bcrypt: Para criptografar senhas de usuários.
A aplicação segue as melhores práticas de design e organização de código, incluindo conceitos como Event Sourcing, SOLID, Estrutura de Dados e Design Patterns.
Cadastro de Usuários e Lojistas:
- Campos obrigatórios: Nome Completo, CPF, e-mail e senha.
- Validação de CPF e e-mail únicos no sistema.
- Lojistas e usuários têm carteiras virtuais com saldo.
Transferência de Dinheiro:
- Os usuários podem enviar dinheiro para outros usuários ou lojistas, desde que tenham saldo suficiente.
- As transferências são atômicas, ou seja, se houver qualquer inconsistência, a operação é revertida.
Validação de Transferências:
- Antes de concluir a transferência, a aplicação consulta um serviço de autorização externo para validar a operação.
- Utilização de um mock para simular a autorização externa (GET - https://util.devi.tools/api/v2/authorize).
Notificações:
- Ao receber um pagamento, o usuário ou lojista é notificado via SMS ou e-mail.
- A notificação é feita por meio de um serviço de terceiros, que também é simulado via mock (POST - https://util.devi.tools/api/v1/notify).
Gerenciamento de Banco de Dados:
- O sistema utiliza um banco de dados MySQL para persistência de dados, com tabelas para armazenar informações de usuários, lojistas e transações.
Cache com Redis:
- Utilização de Redis para operações de FIFO e otimização de algumas consultas.
- Docker
- Node.js (versão >= 20)
- MySQL
- Redis
Clone o repositório:
git clone https://github.com/Lucaswillians/payflow.git cd payflowSuba os containers com Docker:
docker-compose up -d
Isso vai subir o ambiente com MySQL, Redis e o seu backend NestJS.
Inicie o servidor:
docker-compose exec backend npm run start:dev
Agora, a aplicação estará disponível em http://localhost:3000.
Para facilitar o teste e a visualização dos endpoints da API, foi incluído um arquivo do Insomnia no projeto. O Insomnia é uma ferramenta de teste de APIs que permite importar e testar requisições de forma prática e visual.
- Baixe e instale o Insomnia, caso ainda não tenha.
- Importe o arquivo
payflow-apis.json(disponível no repositório) diretamente no Insomnia. - O arquivo já contém as configurações dos principais endpoints da API, incluindo os detalhes das requisições e dos corpos de dados esperados para cada operação.
Com o arquivo importado, você poderá:
- Testar os endpoints como /transfers, /users e /wallets, sem precisar configurar manualmente as requisições.
- Visualizar os corpos de requisição e resposta para cada endpoint.
- Realizar testes de maneira rápida e eficiente, verificando as respostas da API.
Basta seguir os exemplos de requisição contidos no arquivo para enviar as requisições e verificar os resultados no Insomnia.
Este arquivo serve como uma documentação interativa, permitindo que você explore os endpoints de forma simples.