Projeto desenvolvido como parte de um estudo orientado a projetos, com o objetivo de evoluir gradualmente uma aplicação Java desde uma solução simples baseada em arquivos até uma API REST moderna utilizando Spring Boot.
Ao longo do desenvolvimento, o projeto passou por diversas refatorações arquiteturais, permitindo explorar conceitos fundamentais de persistência de dados, orientação a objetos, APIs REST, segurança, modelagem de domínio e testes automatizados.
- Criação de contas bancárias
- Consulta de dados da conta
- Depósito de valores
- Saque de valores
- Transferência entre contas
- Exclusão de contas
- Registro de transações
- Autenticação de usuários
- Autorização baseada em JWT
A primeira versão utilizava armazenamento local através da API Java NIO.2.
As contas eram salvas em arquivos texto e posteriormente reconstruídas em objetos durante a leitura dos dados.
Principais conceitos estudados:
- Manipulação de arquivos com Java NIO.2
- Serialização manual de dados
- Programação orientada a objetos
- Interface via terminal
A segunda versão substituiu completamente a persistência em arquivos por um banco de dados PostgreSQL utilizando JDBC.
Também foram adicionadas novas funcionalidades e melhorias estruturais.
Principais mudanças:
- Migração para PostgreSQL
- Implementação da camada DAO
- Operações de transferência entre contas
- Exclusão de contas
- Criptografia de senhas
- Refatoração do modelo de domínio
Tecnologias utilizadas:
- JDBC
- PostgreSQL
- Maven
A terceira versão transformou o sistema em uma API REST.
A camada DAO foi substituída pelos repositórios do Spring Data JPA, simplificando o acesso aos dados e permitindo uma modelagem mais rica do domínio.
Principais melhorias:
- Spring Boot
- Spring Data JPA
- Spring Security
- JWT Authentication
- Tratamento global de exceções
- Arquitetura em camadas
- Value Objects
- Relacionamentos JPA
A aplicação segue uma arquitetura baseada em camadas:
Controller
↓
Service
↓
Repository
↓
Banco de Dados
Responsável por receber as requisições HTTP e retornar respostas apropriadas.
Contém as regras de negócio da aplicação.
Responsável pelo acesso aos dados através do Spring Data JPA.
Contém as entidades e objetos de valor que representam o domínio bancário.
- Cliente
- Conta
- Transação
- Cliente ↔ Conta (1:1)
- Conta ↔ Transação (1:N)
Anotações utilizadas:
@Entity@Table@OneToOne@OneToMany@ManyToOne@JoinColumn
A autenticação da aplicação é realizada através de JWT (JSON Web Token).
Fluxo:
- Usuário realiza login.
- A aplicação gera um token JWT.
- O cliente envia o token no header Authorization.
- O Spring Security valida o token.
- O acesso aos endpoints protegidos é liberado.
Principais tecnologias:
- Spring Security
- JWT
- AuthenticationManager
- UserDetails
- UserDetailsService
O projeto possui testes unitários para as regras de negócio relacionadas às operações bancárias.
Tecnologias utilizadas:
- JUnit 5
- Mockito
Casos testados:
- Depósito
- Saque
- Transferência
- Validação de valores inválidos
- Tratamento de exceções
- Java
- Spring Boot
- Spring Data JPA
- Spring Security
- JWT
- Maven
- PostgreSQL
- JUnit 5
- Mockito
- HTML
- CSS
- JavaScript
- Desenvolvimento da interface web
- Documentação da API com Swagger/OpenAPI
- Ampliação da cobertura de testes
- Dockerização da aplicação
- Deploy em ambiente cloud
git clone https://github.com/seu-usuario/seu-repositorio.gitCrie um banco PostgreSQL e ajuste as configurações em:
application.propertiesmvn spring-boot:runOu:
mvn clean install
java -jar target/nome-da-aplicacao.jarEste projeto foi desenvolvido com foco em aprendizado prático e evolução contínua de conhecimentos em:
- Programação Orientada a Objetos
- Persistência de Dados
- APIs REST
- Arquitetura de Software
- Segurança de Aplicações
- Testes Automatizados
- Desenvolvimento Backend com Spring Boot