Skip to content

VictorDMoura/Jbank

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏦 JBank - Sistema Bancário Digital

Java Spring Boot MySQL Maven

Um sistema bancário digital desenvolvido em Spring Boot que implementa funcionalidades essenciais de uma carteira digital, incluindo criação de contas, depósitos, transferências e extratos com auditoria completa.

🚀 Sobre o Projeto

O JBank foi desenvolvido como parte de um curso avançado de Spring Boot, focando em conceitos fundamentais e práticas avançadas de desenvolvimento backend. O projeto demonstra a implementação de uma arquitetura robusta e escalável para sistemas financeiros.

🎯 Principais Funcionalidades

  • Gestão de Carteiras: Criação, consulta e exclusão de carteiras digitais
  • Operações Financeiras: Depósitos e transferências entre carteiras
  • Extratos Paginados: Consulta de histórico de transações com paginação
  • Auditoria Completa: Rastreamento de todas as operações com logs detalhados
  • Controle de Concorrência: Implementação de versionamento otimista para transações
  • Validações Avançadas: Validação de dados com Hibernate Validator

🛠️ Tecnologias Utilizadas

Backend

  • Java 21 - Linguagem de programação
  • Spring Boot 3.5.5 - Framework principal
  • Spring Data JPA - Persistência de dados
  • Spring Web - API REST
  • Hibernate Validator - Validação de dados
  • MySQL - Banco de dados relacional
  • Maven - Gerenciamento de dependências

Arquitetura e Padrões

  • MVC (Model-View-Controller) - Arquitetura em camadas
  • Repository Pattern - Padrão de acesso a dados
  • DTO (Data Transfer Object) - Transferência de dados
  • Exception Handling - Tratamento global de exceções
  • Filters & Interceptors - Manipulação de requisições/respostas

🏗️ Arquitetura do Sistema

src/main/java/com/vmalmeida/jbank/
├── controller/          # Controladores REST
│   ├── dto/            # Data Transfer Objects
│   ├── WalletController.java
│   └── TransferController.java
├── entities/           # Entidades JPA
│   ├── Wallet.java
│   ├── Deposit.java
│   └── Transfer.java
├── service/            # Lógica de negócio
│   ├── WalletService.java
│   └── TransferService.java
├── repository/         # Acesso a dados
│   ├── dto/           # Projections
│   └── impl/          # Implementações customizadas
├── exception/          # Tratamento de exceções
├── filter/            # Filtros HTTP
├── interceptors/      # Interceptadores
└── JbankApplication.java

🔧 Conceitos Técnicos Implementados

🛡️ Filters e Interceptors

  • IpFilter: Captura e injeta o IP do usuário em todas as requisições
  • AuditInterceptor: Registra logs detalhados de todas as operações (método, URL, status, IP)

🔒 Controle de Concorrência

  • Versionamento Otimista: Implementado com @Version na entidade Wallet
  • Transações: Uso de @Transactional para garantir consistência

📊 JPA Projections

  • StatementView: Interface de projeção para consultas otimizadas de extratos
  • Queries Customizadas: Implementação de consultas complexas com paginação

✅ Validações e Tratamento de Exceções

  • Hibernate Validator: Validação automática de DTOs
  • GlobalExceptionHandler: Tratamento centralizado de exceções
  • Problem Detail: Padronização de respostas de erro (RFC 7807)

📋 Endpoints da API

Carteiras (/wallets)

POST   /wallets                    # Criar carteira
DELETE /wallets/{walletId}         # Excluir carteira
POST   /wallets/{walletId}/deposit # Realizar depósito
GET    /wallets/{walletId}/statements # Consultar extrato

Transferências (/transfers)

POST   /transfers                  # Realizar transferência

🚀 Como Executar

Pré-requisitos

  • Java 21+
  • Maven 3.6+
  • Docker e Docker Compose

1. Clone o repositório

git clone <url-do-repositorio>
cd jbank

2. Inicie o banco de dados

cd docker
docker-compose up -d

3. Execute a aplicação

./mvnw spring-boot:run

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

📊 Estrutura do Banco de Dados

Tabelas Principais

  • tb_wallets: Armazena informações das carteiras (CPF, email, nome, saldo)
  • tb_deposits: Registra todos os depósitos realizados
  • tb_transfers: Registra todas as transferências entre carteiras

Relacionamentos

  • Wallet 1:N Deposits
  • Transfer N:1 Wallet (sender)
  • Transfer N:1 Wallet (receiver)

🔍 Exemplos de Uso

Criar uma carteira

POST /wallets
{
  "cpf": "12345678901",
  "email": "usuario@email.com",
  "name": "João Silva"
}

Realizar depósito

POST /wallets/{walletId}/deposit
{
  "amount": 100.00
}

Realizar transferência

POST /transfers
{
  "senderWalletId": "uuid-sender",
  "receiverWalletId": "uuid-receiver",
  "amount": 50.00
}

🎓 Aprendizados e Conceitos Aplicados

Este projeto consolidou conhecimentos em:

  • Filters e Interceptors para manipulação e auditoria de requests/responses
  • Arquitetura do Spring Web e criação de Handlers personalizados
  • Validações avançadas com Hibernate Validator e tratamento de exceções
  • Técnicas para garantir integridade das transações e controle de concorrência
  • Consultas avançadas com JPA Projections para otimização de queries complexas
  • Padrões de arquitetura e boas práticas de desenvolvimento backend

👨‍💻 Autor

Victor Almeida

Desenvolvido durante curso da Build & Run com Bruno Garcia


⭐ Se este projeto foi útil para você, considere dar uma estrela!

#SpringBoot #JPA #HibernateValidator #BackendDevelopment #Java #API #SoftwareEngineering

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages