Sistema bancário completo implementado com arquitetura de microserviços usando Django REST Framework, seguindo os padrões DDD (Domain-Driven Design) e CQRS (Command Query Responsibility Segregation).
BankMore - Sistema Bancário (Python Django)
│
├── 📁 bankmore_project/ # Projeto Django principal
│ ├── settings/ # Configurações por ambiente
│ ├── urls.py # URLs principais
│ └── wsgi.py # WSGI application
│
├── 📁 shared/ # Biblioteca compartilhada
│ ├── models/ # Modelos compartilhados
│ ├── services/ # Serviços compartilhados (JWT)
│ ├── utils/ # Utilitários (CPF, Hash)
│ └── middleware/ # Middleware personalizado
│
├── 🏦 account_api/ # API de Contas (Porta 8001)
│ ├── models.py # Modelos de domínio
│ ├── views.py # ViewSets REST
│ ├── serializers.py # Serializers DRF
│ ├── services.py # Serviços de aplicação
│ └── urls.py # URLs da API
│
├── 💸 transfer_api/ # API de Transferências (Porta 8002)
│ ├── models.py # Modelos de domínio
│ ├── views.py # ViewSets REST
│ ├── serializers.py # Serializers DRF
│ ├── services.py # Serviços de aplicação
│ └── urls.py # URLs da API
│
├── 💰 fee_api/ # API de Tarifas (Porta 8003)
│ ├── models.py # Modelos de domínio
│ ├── views.py # ViewSets REST
│ ├── serializers.py # Serializers DRF
│ ├── services.py # Serviços de aplicação
│ └── urls.py # URLs da API
│
├── 🧪 tests/
│ ├── test_account_api/ # Testes da API de contas
│ ├── test_transfer_api/ # Testes da API de transferências
│ └── test_fee_api/ # Testes da API de tarifas
│
├── 🗄️ database/
│ └── init.sql # Script de inicialização do banco
│
├── 🐳 docker-compose.yml # Orquestração dos serviços
├── 📋 manage.py # Django management
└── 📖 README.md # Documentação
[Cliente]
↓ HTTP/JWT
[Account API] ←→ [SQLite Database]
↓ Kafka (Transfer Events)
[Transfer API] ←→ [SQLite Database]
↓ Kafka (Fee Events)
[Fee API] ←→ [SQLite Database]
O sistema é composto por 3 microserviços principais:
- Cadastro e autenticação de usuários
- Movimentações na conta corrente (depósitos e saques)
- Consulta de saldo
- Inativação de contas
- Transferências entre contas da mesma instituição
- Processamento de transferências com validações
- Comunicação assíncrona via Kafka
- Processamento de tarifas de transferência
- Consumo de mensagens Kafka
- Cobrança automática de tarifas
- Python 3.11+: Linguagem principal
- Django 4.2: Framework web
- Django REST Framework: APIs REST
- SQLite: Banco de dados
- JWT: Autenticação e autorização
- Kafka: Mensageria assíncrona
- Celery: Processamento assíncrono
- Redis: Cache e broker do Celery
- Docker: Containerização
- Swagger: Documentação das APIs
- Cadastro e autenticação de usuários
- Realização de movimentações (depósitos e saques)
- Transferências entre contas
- Consulta de saldo
- Sistema de tarifas
- DDD: Estrutura de domínio bem definida
- CQRS: Separação de comandos e consultas
- JWT: Autenticação em todos os endpoints
- Idempotência: Prevenção de operações duplicadas
- Kafka: Comunicação assíncrona
- Cache: Implementado com Redis
- Validações: CPF, senhas, valores, etc.
- Docker: Containerização completa
- Microserviços: Arquitetura distribuída
- Cache: Otimização de consultas
- Kafka: Comunicação assíncrona
- Testes: Estrutura preparada para testes
- Swagger: Documentação completa
- Python 3.11+
- Docker e Docker Compose instalados
- Clone o repositório
git clone <repository-url>
cd BankMore-Backend-Python
- Crie e ative o ambiente virtual
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
- Instale as dependências
pip install -r requirements.txt
- Execute as migrações
python manage.py migrate
- Execute os serviços
# Account API
python manage.py runserver 8001
# Transfer API (em outro terminal)
python manage.py runserver 8002 --settings=bankmore_project.settings.transfer
# Fee API (em outro terminal)
python manage.py runserver 8003 --settings=bankmore_project.settings.fee
- Execute o sistema completo
docker-compose up --build
- Aguarde a inicialização
- Kafka: http://localhost:9092
- Account API: http://localhost:8001
- Transfer API: http://localhost:8002
- Fee API: http://localhost:8003
- Account API Swagger: http://localhost:8001/swagger/
- Transfer API Swagger: http://localhost:8002/swagger/
- Fee API Swagger: http://localhost:8003/swagger/
Cadastra uma nova conta corrente
{
"cpf": "12345678901",
"name": "João Silva",
"password": "senha123"
}
Realiza login e retorna JWT token
{
"cpf": "12345678901",
"password": "senha123"
}
Realiza movimentação na conta (requer autenticação)
{
"request_id": "uuid-unique",
"account_number": "123456",
"amount": 100.00,
"type": "C"
}
Consulta saldo da conta (requer autenticação)
Realiza transferência entre contas (requer autenticação)
{
"request_id": "uuid-unique",
"destination_account_number": "654321",
"amount": 50.00
}
Consulta tarifas por número da conta
Consulta tarifa específica por ID
- Account: Dados das contas
- Movement: Movimentações financeiras
- Transfer: Histórico de transferências
- Fee: Registro de tarifas cobradas
- IdempotencyKey: Controle de idempotência
- Todos os endpoints protegidos requerem token JWT
- Token contém informações da conta logada
- Validação de expiração e assinatura
- CPF: Validação completa com dígitos verificadores
- Senhas: Hash com salt único por usuário
- Valores: Apenas valores positivos
- Contas: Verificação de existência e status ativo
- Validações iniciais (conta origem, destino, valor)
- Verificação de saldo na conta origem
- Débito na conta origem via Account API
- Crédito na conta destino via Account API
- Registro da transferência no banco de dados
- Publicação no Kafka para cobrança de tarifa
- Fee API: Processa tarifa e debita automaticamente
- Logs estruturados em todos os serviços
- Rastreamento de operações via request_id
- Métricas de performance disponíveis
python manage.py test
- zookeeper: Coordenação do Kafka
- kafka: Broker de mensagens
- redis: Cache e broker do Celery
- sqlite-db: Banco de dados compartilhado
- account-api: API de contas
- transfer-api: API de transferências
- fee-api: API de tarifas
DATABASE_URL
: URL do banco de dadosKAFKA_BOOTSTRAP_SERVERS
: Servidores KafkaJWT_SECRET_KEY
: Chave secreta JWTREDIS_URL
: URL do RedisTRANSFER_FEE_AMOUNT
: Valor da tarifa
- Dockerfiles otimizados
- Configurações externalizadas
- Health checks implementados
- Múltiplas réplicas suportadas
- Cache Redis para consultas frequentes
- Índices otimizados no banco
- Conexões de banco eficientes
INVALID_DOCUMENT
: CPF inválidoUSER_UNAUTHORIZED
: Credenciais inválidasINVALID_ACCOUNT
: Conta não encontradaINACTIVE_ACCOUNT
: Conta inativaINVALID_VALUE
: Valor inválidoINVALID_TYPE
: Tipo de operação inválido
- 200: Sucesso
- 201: Criado com sucesso
- 204: Sucesso sem conteúdo
- 400: Dados inválidos
- 401: Não autorizado
- 403: Token inválido/expirado
- Testes de carga
- Métricas com Prometheus
- Logs centralizados (ELK Stack)
- Circuit Breaker
- Rate Limiting
- Criptografia de dados sensíveis
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ seguindo as melhores práticas de arquitetura de software