Skip to content

Alexssandro-Costa/Simple-Banking-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema Bancário Simplificado

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.


Funcionalidades

  • 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

Evolução do Projeto

Versão 1 — Persistência em Arquivos

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

Versão 2 — Banco de Dados Relacional

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

Versão 3 — API REST com Spring Boot

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

Arquitetura

A aplicação segue uma arquitetura baseada em camadas:

Controller
    ↓
Service
    ↓
Repository
    ↓
Banco de Dados

Camadas

Controller

Responsável por receber as requisições HTTP e retornar respostas apropriadas.

Service

Contém as regras de negócio da aplicação.

Repository

Responsável pelo acesso aos dados através do Spring Data JPA.

Domain

Contém as entidades e objetos de valor que representam o domínio bancário.


Modelagem do Domínio

Entidades

  • Cliente
  • Conta
  • Transação

Relacionamentos

  • Cliente ↔ Conta (1:1)
  • Conta ↔ Transação (1:N)

Anotações utilizadas:

  • @Entity
  • @Table
  • @OneToOne
  • @OneToMany
  • @ManyToOne
  • @JoinColumn

Segurança

A autenticação da aplicação é realizada através de JWT (JSON Web Token).

Fluxo:

  1. Usuário realiza login.
  2. A aplicação gera um token JWT.
  3. O cliente envia o token no header Authorization.
  4. O Spring Security valida o token.
  5. O acesso aos endpoints protegidos é liberado.

Principais tecnologias:

  • Spring Security
  • JWT
  • AuthenticationManager
  • UserDetails
  • UserDetailsService

Testes Automatizados

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

Tecnologias Utilizadas

Backend

  • Java
  • Spring Boot
  • Spring Data JPA
  • Spring Security
  • JWT
  • Maven

Banco de Dados

  • PostgreSQL

Testes

  • JUnit 5
  • Mockito

Frontend (Planejado)

  • HTML
  • CSS
  • JavaScript

Próximos Passos

  • 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

Como Executar

Clonar o repositório

git clone https://github.com/seu-usuario/seu-repositorio.git

Configurar o banco de dados

Crie um banco PostgreSQL e ajuste as configurações em:

application.properties

Executar a aplicação

mvn spring-boot:run

Ou:

mvn clean install
java -jar target/nome-da-aplicacao.jar

Objetivo Educacional

Este 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

Releases

No releases published

Packages

 
 
 

Contributors