API RESTful de alta performance e segurança projetada para simular o núcleo (core) de um banco digital moderno.
- Sobre o Projeto
- Diferenciais de Engenharia & FinTech
- Arquitetura da Aplicação
- Stack Tecnológica
- Tabela de Endpoints (API)
- Mecanismo de Segurança e Tratamento de Erros
- Como Executar o Projeto
- Autor & Contato
O FidentBank foi desenvolvido para resolver problemas reais de ecossistemas financeiros distribuídos: consistência de dados, prevenção contra ataques de concorrência (Race Conditions) e alta disponibilidade.
A aplicação gerencia todo o ciclo de vida bancário, desde a abertura e autenticação segura de contas até a execução de transferências, saques e depósitos com garantia absoluta de auditoria e validações rigorosas.
- 💎 Precisão Monetária Absoluta: Todos os valores financeiros utilizam
BigDecimalpara evitar erros de arredondamento de ponto flutuante (double/float). - 🔒 Controle de Concorrência (Pessimistic Locking): Utilização de
@Lock(LockModeType.PESSIMISTIC_WRITE)em transações de saldo, impedindo o problema de Double Spending (gasto duplo) em requisições simultâneas. - 🛡️ Propriedades ACID Garantidas: Operações bancárias envoltas em
@Transactional, garantindo rollback automático em caso de falha durante a transferência entre contas. - 🗄️ Versionamento de Banco de Dados: Evolução controlada do schema do PostgreSQL através de migrations automatizadas com Flyway.
- 🛂 Tratamento Global de Exceções: Interceptação centralizada de falhas via
@RestControllerAdvice, padronizando retornos HTTP e ocultando stack traces sensíveis.
O projeto adota o padrão de Arquitetura em Camadas (Layered Architecture) alinhado aos princípios SOLID e Clean Code:
src/main/java/dev/rodrigo/fidentbank
│
├── 📂 controller # Endpoints REST e validação inicial de entrada (@Valid)
├── 📂 dto # Data Transfer Objects (Request/Response desacoplados da entidade)
├── 📂 service # Regras de negócio, cálculos financeiros e controle transacional
├── 📂 repository # Comunicação com o banco (Spring Data JPA + Pessimistic Locks)
├── 📂 model # Entidades de domínio JPA (User, Account, Transaction)
├── 📂 security # Filtros JWT, Password Encoding e Autorização do Spring Security
└── 📂 exception # Handler global (@RestControllerAdvice) e DTOs de erro padronizados
| Categoria | Tecnologia / Ferramenta |
|---|---|
| Linguagem | Java 17 (LTS) |
| Framework Base | Spring Boot 3.x |
| Segurança & Auth | Spring Security + JWT (JSON Web Tokens) |
| Persistência | Spring Data JPA / Hibernate |
| Banco de Dados | PostgreSQL |
| Migrations | Flyway |
| Containerização | Docker & Docker Compose |
| Documentação/Testes | Postman / Swagger UI / Bean Validation |
| Produtividade | Lombok |
| Método | Endpoint | Descrição | Requer Auth? |
|---|---|---|---|
POST |
/api/v1/auth/register |
Cadastro de novo correntista | ❌ Não |
POST |
/api/v1/auth/login |
Autenticação e geração de Token JWT | ❌ Não |
| Método | Endpoint | Descrição | Requer Auth? |
|---|---|---|---|
GET |
/api/v1/accounts/me |
Consulta saldo e detalhes da conta logada | 🔑 Sim |
POST |
/api/v1/transactions/deposit |
Realiza depósito na conta | 🔑 Sim |
POST |
/api/v1/transactions/withdraw |
Realiza saque na conta | 🔑 Sim |
POST |
/api/v1/transactions/transfer |
Realiza transferência via PIX/TED | 🔑 Sim |
GET |
/api/v1/transactions/statement |
Extrato histórico de transações | 🔑 Sim |
A API possui duas camadas de defesa globais contra dados corrompidos ou maliciosos:
- Portão de Tipo e Leitura (
HttpMessageNotReadableException): Intercepta dados malformados (ex: texto em campo numérico ou datas inválidas) devolvendo400 Bad Request. - Portão de Regras de Negócio (
MethodArgumentNotValidException): Intercepta falhas de anotações@Valid(@CPF,@Email,@NotNull), retornando um JSON limpo com a lista exata dos campos que falharam.
[
{
"campo": "cpf",
"mensagem": "O CPF deve conter exatamente 11 dígitos numéricos"
},
{
"campo": "email",
"mensagem": "Formato de e-mail inválido"
}
]
- Git instalado
- Java 17+ configurado
- Docker & Docker Compose ativos
git clone [https://github.com/RodrigoAndradeDev/FidentBank.git](https://github.com/RodrigoAndradeDev/FidentBank.git)
cd FidentBank
Suba o container do PostgreSQL pré-configurado:
docker-compose up -d
./mvnw spring-boot:run
A aplicação estará acessível em http://localhost:8080.
Desenvolvido por Rodrigo Andrade Estudante de Engenharia de Software na UCSAL | Desenvolvedor Java Full Stack
- GitHub: @RodrigoAndradeDev
- LinkedIn: Rodrigo Andrade
- E-mail: rodrigo.anddev@gmail.com