Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏦 FidentBank - Core Banking System API

API RESTful de alta performance e segurança projetada para simular o núcleo (core) de um banco digital moderno.

Java Spring Boot Spring Security PostgreSQL Docker License


📋 Sumário


🎯 Sobre o Projeto

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.


⚡ Diferenciais de Engenharia & FinTech

  • 💎 Precisão Monetária Absoluta: Todos os valores financeiros utilizam BigDecimal para 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.

🏗️ Arquitetura da Aplicação

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

🛠️ Stack Tecnológica

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

📍 Tabela de Endpoints (API)

🔐 Autenticação & Usuários

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

💳 Operações Bancárias

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

🛡️ Mecanismo de Segurança e Tratamento de Erros

A API possui duas camadas de defesa globais contra dados corrompidos ou maliciosos:

  1. Portão de Tipo e Leitura (HttpMessageNotReadableException): Intercepta dados malformados (ex: texto em campo numérico ou datas inválidas) devolvendo 400 Bad Request.
  2. 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.

Exemplo de Resposta de Erro de Validação (400 Bad Request):

[
  {
    "campo": "cpf",
    "mensagem": "O CPF deve conter exatamente 11 dígitos numéricos"
  },
  {
    "campo": "email",
    "mensagem": "Formato de e-mail inválido"
  }
]

🚀 Como Executar o Projeto

Pré-requisitos

  • Git instalado
  • Java 17+ configurado
  • Docker & Docker Compose ativos

1. Clonar o Repositório

git clone [https://github.com/RodrigoAndradeDev/FidentBank.git](https://github.com/RodrigoAndradeDev/FidentBank.git)
cd FidentBank

2. Subir a Infraestrutura com Docker

Suba o container do PostgreSQL pré-configurado:

docker-compose up -d

3. Executar a Aplicação Spring Boot

./mvnw spring-boot:run

A aplicação estará acessível em http://localhost:8080.


👨‍💻 Autor & Contato

Desenvolvido por Rodrigo Andrade Estudante de Engenharia de Software na UCSAL | Desenvolvedor Java Full Stack

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages