API RESTful completa de um banco digital desenvolvida com Spring Boot 3, simulando operações bancárias reais com segurança, auditoria e boas práticas de desenvolvimento.
Este projeto foi desenvolvido como parte do meu portfólio profissional, com foco em demonstrar habilidades para Java/Spring Boot.
- 🔐 Autenticação e Autorização com JWT e Spring Security
- 💰 Operações Bancárias Completas (Depósito, Saque, Transferência)
- 📊 Extrato com Paginação e Filtros
- 🔍 Sistema de Auditoria para rastreamento de todas operações
- 👥 Controle de Acesso por Roles (USER e ADMIN)
- 📝 Validação de CPF real
- 🐳 Docker Compose para ambiente completo
- 📚 Documentação Swagger/OpenAPI
- ✅ Migrations com Flyway
- 🧪 Testes Automatizados
- Java 17
- Spring Boot 3.2.0
- Maven
- Spring Data JPA + Hibernate
- Spring Security
- Spring Validation
- Spring Actuator
- Spring Web
- PostgreSQL 16
- Flyway (Migrations)
- JWT (jsonwebtoken 0.12.3)
- BCrypt
- SpringDoc OpenAPI 3 (Swagger UI)
- Docker & Docker Compose
- Lombok
O projeto segue uma arquitetura em camadas bem definida:
src/main/java/com/fellps/apibank/
├── config/ # Configurações (Security, OpenAPI)
├── controller/ # Camada de apresentação (REST)
├── dto/ # Data Transfer Objects
├── enums/ # Enumerações (Role, AccountType, TransactionType)
├── exception/ # Tratamento de exceções customizado
├── model/ # Entidades JPA
├── repository/ # Camada de persistência
├── security/ # JWT e autenticação
├── service/ # Lógica de negócio
└── util/ # Utilitários (validadores, geradores)
- Docker e Docker Compose instalados
- Java 17+ (se for executar localmente sem Docker)
- Maven 3.6+ (se for executar localmente)
# Clone o repositório
git clone https://github.com/fellps/apibank.git
cd apibank
# Suba o ambiente completo (banco + API)
docker-compose up -d
# A API estará disponível em http://localhost:8080
# Swagger UI: http://localhost:8080/swagger-ui.html# 1. Suba apenas o PostgreSQL
docker-compose up -d postgres
# 2. Execute a aplicação
./mvnw spring-boot:run
# Ou compile e execute
./mvnw clean package
java -jar target/apibank-1.0.0.jarAcesse a documentação interativa via Swagger UI:
http://localhost:8080/swagger-ui.html
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/v1/auth/register |
Registrar novo usuário |
| POST | /api/v1/auth/login |
Login e obtenção de token JWT |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| GET | /api/v1/accounts |
Listar minhas contas | ✅ |
| GET | /api/v1/accounts/{id} |
Consultar saldo e dados | ✅ |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| POST | /api/v1/accounts/{id}/transactions/deposit |
Realizar depósito | ✅ |
| POST | /api/v1/accounts/{id}/transactions/withdraw |
Realizar saque | ✅ |
| POST | /api/v1/accounts/{id}/transactions/transfer |
Realizar transferência | ✅ |
| GET | /api/v1/accounts/{id}/transactions |
Consultar extrato (paginado) | ✅ |
| GET | /api/v1/accounts/{id}/transactions/filter |
Filtrar por tipo | ✅ |
| GET | /api/v1/accounts/{id}/transactions/date-range |
Filtrar por período | ✅ |
| GET | /api/v1/accounts/{id}/transactions/{txId}/receipt |
Obter comprovante | ✅ |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| GET | /api/v1/admin/users |
Listar todos usuários | 🔒 ADMIN |
| GET | /api/v1/admin/transactions |
Listar todas transações | 🔒 ADMIN |
| GET | /api/v1/admin/audit-logs |
Consultar logs de auditoria | 🔒 ADMIN |
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /actuator/health |
Status da aplicação |
curl -X POST http://localhost:8080/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"email": "joao@email.com",
"cpf": "12345678901",
"password": "senha123"
}'Resposta:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"type": "Bearer",
"userId": 1,
"name": "João Silva",
"email": "joao@email.com",
"role": "USER"
}curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "joao@email.com",
"password": "senha123"
}'curl -X GET http://localhost:8080/api/v1/accounts \
-H "Authorization: Bearer SEU_TOKEN_JWT"curl -X POST http://localhost:8080/api/v1/accounts/1/transactions/deposit \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000.00,
"description": "Depósito inicial"
}'curl -X POST http://localhost:8080/api/v1/accounts/1/transactions/transfer \
-H "Authorization: Bearer SEU_TOKEN_JWT" \
-H "Content-Type: application/json" \
-d '{
"targetAccountNumber": "00000002-1",
"amount": 150.00,
"description": "Pagamento"
}'curl -X GET "http://localhost:8080/api/v1/accounts/1/transactions?page=0&size=10" \
-H "Authorization: Bearer SEU_TOKEN_JWT"id(PK)nameemail(unique)cpf(unique, validado)password(BCrypt)role(USER, ADMIN)activecreatedAt,updatedAt
id(PK)accountNumber(unique, gerado automaticamente)agencyaccountType(CORRENTE, POUPANCA)balance(nunca negativo)activeuserId(FK)createdAt,updatedAt
id(PK)transactionType(DEPOSITO, SAQUE, TRANSFERENCIA_*)amountdescriptiontransactionDateaccountId(FK)targetAccountId(FK, nullable)reversedcreatedAt
id(PK)entityNameentityIdactionperformedBy(FK)performedAtoldValue,newValue(JSON)ipAddressdescription
Todas as rotas protegidas requerem um token JWT válido no header:
Authorization: Bearer {token}
- USER: Acesso às próprias contas e transações
- ADMIN: Acesso total, incluindo endpoints administrativos
- ✅ CPF válido (algoritmo completo de validação)
- ✅ Email único
- ✅ Senhas criptografadas com BCrypt
- ✅ Saldo nunca negativo
- ✅ Validação de propriedade de recursos
Todo o sistema possui rastreamento completo de ações:
- Criação de usuários
- Todas as transações
- Alterações em contas
- Quem fez, quando, e o que mudou
Logs de auditoria podem ser consultados por administradores via endpoint /api/v1/admin/audit-logs.
# Executar todos os testes
./mvnw test
# Executar com coverage
./mvnw verifyservices:
postgres: # PostgreSQL 16
api: # Spring Boot ApplicationConfigure via arquivo .env (use .env.example como referência):
DB_HOST=localhost
DB_PORT=5432
DB_NAME=apibank
DB_USERNAME=apibank
DB_PASSWORD=apibank123
JWT_SECRET=sua-chave-secreta
JWT_EXPIRATION=86400000
SERVER_PORT=8080- Agendamento de transferências
- PIX (chave PIX, QR Code)
- Rate Limiting com Bucket4j
- Notificações por e-mail/webhook
- Análise de crédito
- Cartão de crédito virtual
- CI/CD com GitHub Actions
- Observabilidade (Prometheus + Grafana)
Fellipe Babeto
- GitHub: @FellpsH
- LinkedIn: Fellipe Babeto
Projeto desenvolvido como parte do meu portfólio profissional para demonstrar habilidades em:
- ✅ Desenvolvimento Java/Spring Boot avançado
- ✅ Arquitetura de microsserviços
- ✅ Segurança e autenticação
- ✅ Boas práticas e padrões de projeto
- ✅ Docker e containerização
- ✅ Documentação técnica
Para dúvidas, sugestões ou oportunidades profissionais, entre em contato!
⭐ Se este projeto foi útil, considere dar uma estrela no GitHub!