Este projeto tem como objetivo desenvolver uma API para um sistema de transações bancárias, capaz de gerenciar múltiplas transações concorrentes de forma eficiente e segura.
A API é projetada para garantir a integridade do saldo das contas em todas as operações, implementando mecanismos que previnem inconsistências, como conflitos de transações e atualizações simultâneas.
Integridade dos Dados: A API realiza validações em cada transação, assegurando que operações simultâneas não resultem em erros ou corrupção de dados. Isso inclui o uso de transações atômicas e estratégias de isolamento adequadas.
Escalabilidade e gestão de transações simultâneas: A API implementa estratégias de filas e cache, facilitando a comunicação assíncrona das transações e garantindo a possibilidade de escalar o projeto como um todo.
Cadastro de Conta Bancária:
Transações:
A aplicação suporta transações dos seguintes tipos:
Processamento em filas:
Armazenamento em cache:
[!IMPORTANT] Este projeto terá futuras atualizações com melhorias e implementação de novas funcionalidades. Você pode conferir as melhorias planejadas no Roadmap de melhorias
Esta aplicação foi construída para rodar em contêineres Docker, juntamente com o banco de dados (Postgres) e o Redis. Para iniciá-la, é necessário configurar ambos os contêineres (um para a aplicação e outro para cada banco de dados). As variáveis de ambiente estão configuradas no arquivo .env
como sugestão e podem ser alteradas conforme a necessidade.
Siga os passos abaixo:
$ git clone https://github.com/p1reis/banking-transaction-system.git && cd banking-transaction-system
$ git clone git@github.com:p1reis/banking-transaction-system.git && cd banking-transaction-system
Você pode usar o gerenciador de pacotes que preferir. Para este projeto, eu utilizei o pnpm, então este documento seguirá essa abordagem.
$ pnpm install
Use o arquivo .env
para definir as variáveis de ambiente que você precisa:
# Postgres database variables:
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_PORT=
POSTGRES_DB=
POSTGRES_TZ=
POSTGRES_SCHEMA=
# Database connection:
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:${POSTGRES_PORT}/${POSTGRES_DB}?schema=${POSTGRES_SCHEMA}&options=-c%20timezone=${POSTGRES_TZ}
# Port application:
PORT=
# Redis:
REDIS_PORT=
REDIS_HOST=
Para desenvolvimento local com recarregamento da aplicação, você pode usar o arquivo docker-compose.db.yml para criar contêiners para rodar a aplicação e outros para os banco de dados. Execute o seguinte comando:
$ pnpm run docker-up
Este comando iniciará os contêineres da aplicação e do banco de dados. Todas as dependências necessárias já estarão instaladas nos contêineres, então você não precisa se preocupar com isso.
Para executar, escolha o modo que deseja e use:
# development
$ pnpm run start
# watch mode
$ pnpm run start:dev
# production mode
$ pnpm run start:prod
Note: Verifique no terminal do Docker se a aplicação está rodando corretamente.
Após iniciar a aplicação, você pode precisar executar as migrations para configurar o banco de dados corretamente. Siga os passos abaixo:
Acesse o contêiner da aplicação:
Primeiro, você precisa acessar o contêiner da aplicação que foi criado. Execute o seguinte comando:
$ docker exec -it application sh
Executar as migrations:
Dentro do contêiner, execute o comando para rodar as migrations. O comando pode variar dependendo da sua configuração, mas geralmente será algo como:
$ pnpm exec prisma migrate deploy
Verificar o status das migrations:
Após executar as migrations, você pode querer verificar se todas foram aplicadas corretamente. Isso pode ser feito consultando o banco de dados ou utilizando comandos específicos, dependendo da ferramenta que você está usando.
Sair do contêiner:
Para sair do contêiner, basta digitar exit
.
[!NOTE] Se você encontrar erros durante a execução das migrations, verifique as mensagens de erro no terminal. Alguns problemas comuns incluem:
Conexão com o banco de dados: Certifique-se de que o contêiner do banco de dados esteja em execução e que as variáveis de ambiente estão corretas.
Configurações do arquivo
.env
: Verifique se todas as variáveis necessárias estão preenchidas corretamente.
Acesse a coleção no Postman para realizar requisições.
Este repositório inclui apenas os testes automatizados básicos do Nest.
Para iniciar os testes, execute:
# unit tests
$ pnpm run test
# test coverage
$ pnpm run test:cov
Este projeto não inclui testes end-to-end.
Typescript
Nest.js
Prisma
Redis
Bull
PostgreSQL
Docker
Todas as tarefas, issues e progresso do projeto está sendo mapeado no Github Projects.
Acesse: Sistema de Transações Bancárias
Sinta-se à vontade para entrar em contato comigo. Abaixo estão as melhores maneiras de me contatar:
Licenciado sob a MIT licensed.