https://github.com/ewertondrigues02/banco-digital
Em desenvolvimento - Banco digital implementado em Java, utilizando o ecossistema Spring Boot e explorando diferentes padrões de projeto como Camadas (Layered Architecture), Factory Method, Singleton e MVC.
https://github.com/ewertondrigues02/banco-digital
actuator clean-code docker flyway-migrations h2-database java layered-architecture mvc-architecture mvc-pattern postgresql singleton-pattern spring spring-boot spring-data-jpa spring-mail spring-security
Last synced: 8 months ago
JSON representation
Em desenvolvimento - Banco digital implementado em Java, utilizando o ecossistema Spring Boot e explorando diferentes padrões de projeto como Camadas (Layered Architecture), Factory Method, Singleton e MVC.
- Host: GitHub
- URL: https://github.com/ewertondrigues02/banco-digital
- Owner: ewertondrigues02
- License: mit
- Created: 2025-01-16T22:33:14.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2025-03-15T17:21:53.000Z (8 months ago)
- Last Synced: 2025-03-15T18:25:32.622Z (8 months ago)
- Topics: actuator, clean-code, docker, flyway-migrations, h2-database, java, layered-architecture, mvc-architecture, mvc-pattern, postgresql, singleton-pattern, spring, spring-boot, spring-data-jpa, spring-mail, spring-security
- Language: Java
- Homepage:
- Size: 168 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Banco Digital - Nos 4 Padrões de Projeto mais Utilizados
Este repositório contém uma aplicação de um banco digital desenvolvida com **Spring Boot 3.4.1** e **Java 21**, explorando diferentes **padrões de projeto**:
- **Padrão em Camadas** - Em Desenvolvimento - Diagrama Conceitual [](https://viewer.diagrams.net/?tags=%7B%7D&highlight=0000ff&edit=_blank&layers=1&nav=1&title=Diagrama%20sem%20nome.drawio#R7V1bc9o4FP41mdl9SAbj%2B2OAkmamO8007fby0jG2ApoYi9omIfvrV7IlX2QRhIuxSKEp2EfysTjn06ejIzm50MfLzU3srRb%2FoACEF8NBsLnQJxfDoesM8TsRvOQC0zVzwTyGQS7SSsE9%2FA9Q4YBK1zAASa1iilCYwlVd6KMoAn5ak3lxjJ7r1R5QWL%2FrypuDhuDe98Km9CsM0kUuHZqDQVnwHsD5IuVLZp7%2FOI%2FROqI3vBjqg%2ByVFy89powKkoUXoOeKSH93oY9jhNL8aLkZg5DYltktv266pbRoeAyiVOYC%2F%2Fbd9acbfaa%2F%2BJYz%2BfH%2B5cvo46Vh52qevHAN2PfIWpu%2BMBPBZWbDkZescg88wA3ASkcrEMMlSEGMZfhe2GXgrhSNFukyxCUauTSE8wgf%2B7itWVlhDFIaeMmCKJwM8MkDitIxClGc3Vw3hrY9GmF56M1AOCpszqoE4MFbhym9kOJLG5JbrDwfRvPPaIUlOhbQ7zGByzm2Ughn%2BB3Olvj9aeXj9w%2FIC3BLvcgH8VXyNMeX%2BGgJfdqwJPJWn9Edgpm5iaTpAeqUJxCnYFMRUY%2FcAISNE7%2FgKrTUcCg6aPcxGFqeSzBaVLSowJDJPAr%2FeaG5RAA%2BoCDYAxCmeQYEA8TdehZC%2F8ZLwbP30hcidL1vRFgNRFzf3WIBNUwDHviLpju8TcwBMQlf04IlDAJy%2Beh5AVNwjx1FdD3jEQfLMvdug8N4PJ2OxzsdU4NXFRjmgbxmmXWvDZpecwVe0zvzWpPYCb9hCaO4s99IuGJw%2FKs1%2FaYNjuo4ZzcBE8Zb7W87kfnlbVjEYN6MtWPwqm2Hdt22poDJtKHAtk5ntnXPgxsb3G6jJCU80HJcex270v3PqkOk7%2BiHKa4A5DbKzISF2ltkzAP58VLAm0cd7yyt4blD0GaH9FiE%2BsrQozU802OX9GjtHZ6oRo%2B6ACBWYfAaUqxfa8QKLpPMFdeERM3VJrMYK8dHc%2FJZ8myhE7cxV5vXOD36PTwueqNX49To1VQu%2BrTOqZVu6dXYgp2ToddmpqVkRf306K9l9Lm%2FH%2FuPPiXS6GrRI5%2Bwskw5E7qdmVAi7%2FH22XHpRbhoSfyNRdEDipdeClH0c46wz6ODU6a9BU9bcaPxec6eKbOZ0ZnAOUy9MMt0Ro%2F9sqbrTvHrOKwp78q%2BWJJFZCfEktxijG0LgkhdYEO7MxtK5Dn%2BMJr0w3WCG%2FmzFB6SIgvQ7u5XFCSCYOSonGg30zjEDVjyLgr%2BGD7cw29sxthzEGmfXBBpcvToWAJ6NAQ2LJbUDm9EiTAyeQSpv6C2WhG7Za0wR%2FgHt2uc%2Fzdx1TGRXA1NgVAks5tCrVkNf2iiO%2FBCkcxuCrVmNXLGWl0XimS22Wwxf7UmuFrjrsY%2F%2Bgit0xBGYFxs1xKwAP43JS4dPcAwrM4x3aGZQTZJY%2FQIKiUP2YsfeRgvfSAjzR1KIImUcdkMpSlaCogrJUNLk98q3MePSdk5Rc5ANKTirrYihcvNnOyPu%2FKeE%2BMqBglaxz649Ul7Rvg0P%2BJqBUkn6UR776Ce33LS9wAmCOq91Msi%2BoTkQv76NLn%2Fe9tIVgdPhCIg8nkVerROBQa%2FMeK1X5OfTi0rGxzbjnitZgCadtQxrpniugf%2BOobp1n1EJ%2B1PyzqKP1kejNvNIpitiDpyZ952ROtFwoimuxhF1zibiGIU0Q6fztYBnL6ncAMVpnD5OsAnHC8Uu20l%2B0WBKvndeWrl%2Bdme%2BQoAcLyEaS4Mt2%2FLO1kaLFYOWtLg%2Fu6%2BlHRwd7wnsdLXOe8N6qB3HAHvicb%2BzlJXrAHn1NWRUlcFDPdOgSiSyXKauw7uQfwEyYLoG2PJIjPWliX39rVo0fS4LCmxG7drluQT%2FI7bN0vaEjtt3j5LJsWksDj8meRdPzkoRbpbkPTqnPmoJOjusbO1MQMd6dkMdIurKPflpSgOQMyV1NltHnpJstW%2BnT03oMs%2Bk9HZjM04PzeA39e4Ayb085B90N2GnFOZz7nNwPZLouxMrsER47Hr7uSIlmHJHr7tKwxxJZJUIAquycPm%2BGwWIv%2Bx7owk9eKUL8%2BEUxiySlhF5ayxwjGd0viPc1aInq8jmG8CKjThr%2F2NVshOvpOTK5OdTjbVwskLO9vA9BvTgY8rV%2BGz8iJywq7ZSvP5AocEZ2IzzMGrD5vQyBUEtSf1X09ai%2Bi%2FEMYgxPZ6ArUGi3BD75FzVjlz5raFGvy4kn93elWJvoYig1Ok84py2zQUYSiRx2qLanSJkgd6YZrfwL5EokJR7Jdw%2F15D%2B%2BvYL%2FH%2BvdITDo19Bumd2Ge%2FfkEd7HOxl8Ev1Etjn%2F%2FFBryi%2FrHfXIo6Eexr7Xj%2FONhnkN6JffYwkbLYNw%2BF%2FYai%2FrEvsdVITezXYh6tFfIHXbG%2BbMSjHuub9V3dBr%2FLXz7i2aFob%2BRvuY%2FO9TCaIii7Sa7xsJ1GYmuZmp2m5YChKTVcWIp1GpPvNGzb0r6dxuI7Da%2Bo%2F%2BFCIv%2BlJvK5aYJaA4YlO2CwB%2FOVwb7OZeCKp8f2HjDMHYp6x35hsjP4Dwp%2B9iDLbvA7qoGf21lhtc4PaTsUKQB%2BicUnRcGvcnLUkQU%2F6yXqgJ%2BbJNv8qkrbSXJDkQLgH54s%2BFVmfub4neB3lAM%2FF604%2FC6QtisDDUUKgF9iH4qi4O%2Be%2BTMNlVX8342FDNnhQLVYyHQ5IBste4TNb1flFSnQI053sUzpWEh2OGC9RBnw8%2FE7jpZbot8c7tJ0TPjbH9%2BnjxH499csQrc38Y%2Bv98i5fCMTgVbQt7vCvvSSAUsVKYN9nSN%2Bqy3x86n8XjNAQuSf7iygTvt2K97vPfep2vYgi0%2F%2FsBbuH%2FK4vSEfn5Z%2FeSSvXv55F%2F3d%2Fw%3D%3D)
- **Factory Method** - Na Fila de Desenvolvimento
- **Singleton** - Na Fila de Desenvolvimento
- **MVC** - Na Fila de Desenvolvimento
O objetivo é demonstrar as diferenças e benefícios de cada abordagem, mantendo uma base tecnológica robusta e moderna.
---
## 🛠 Tecnologias Utilizadas
### 🔹 Backend
- **Java 21** – Linguagem principal do projeto, utilizada para desenvolver a aplicação com alto desempenho e segurança.
- **Spring Boot 3.4.1** – Framework para facilitar a configuração e desenvolvimento de aplicações Java baseadas em Spring.
- **Spring Data JPA** – Abstração para facilitar a persistência de dados utilizando o Hibernate e o banco de dados relacional.
- **Spring Web** – Permite a criação de APIs REST e configuração de controllers HTTP na aplicação.
- **Spring Security** – Módulo para gerenciamento de autenticação e autorização, garantindo a segurança da aplicação.
- **JWT (JSON Web Token)** – Utilizado para autenticação segura e controle de acesso à API.
- **Spring Boot Mail** – Módulo para envio de e-mails transacionais dentro da aplicação.
- **Spring Validation** – Utilizado para validar os dados de entrada da aplicação de forma eficiente.
### 🔹 Banco de Dados
- **PostgreSQL** – Banco de dados relacional utilizado para armazenar os dados da aplicação.
- **Amazon RDS** – Serviço de banco de dados gerenciado na nuvem para escalabilidade e alta disponibilidade.
- **H2 Database** – Banco de dados em memória utilizado para testes e desenvolvimento.
- **Flyway** – Ferramenta de versionamento e migração do banco de dados, garantindo controle sobre as alterações estruturais.
### 🔹 Testes
- **JUnit e Mockito** – Ferramentas para criação e execução de testes unitários e mock de dependências.
- **Bacon H2** – Biblioteca auxiliar para simplificação e otimização de testes com banco de dados H2.
- **Apache JMeter** - Ferramenta para testes de carga e desempenho de aplicações.
- **OWASP ZAP** – Ferramenta de segurança para testes de vulnerabilidades em aplicações web.
### 🔹 Documentação e Monitoramento
- **Swagger** – Ferramenta para documentação interativa de APIs, permitindo testes e visualização dos endpoints.
- **Spring Boot Actuator** – Fornece métricas, monitoramento e endpoints para gerenciar a aplicação em tempo real.
- **Prometheus** – Sistema de monitoramento e coleta de métricas para análise do desempenho da aplicação.
- **Grafana** – Plataforma para visualização de métricas e dashboards baseados em dados coletados pelo Prometheus.
### 🔹 Infraestrutura
- **Docker** – Plataforma de conteinerização que permite empacotar e executar a aplicação de forma isolada.
---
## 📦 Pré-requisitos
1. **Java 21**
- Verifique a instalação:
```bash
java -version
```
2. **Maven 3.8+**
- Verifique a instalação:
```bash
mvn -version
```
3. **Docker**
- Verifique a instalação:
```bash
docker --version
```
4. **PostgreSQL (opcional)**
- Caso não utilize Docker, configure o banco de dados manualmente.
---
## 🚀 Como Usar
### 1. Clone o Repositório
```bash
git clone https://github.com/ewertondrigues02/banco-digital-padroes.git
cd banco-digital-padroes
```
---
### 2. Configuração do Banco de Dados
#### Usando Docker
Execute o seguinte comando para iniciar o container do PostgreSQL:
```bash
docker-compose up -d
```
#### Configuração Manual (sem Docker)
1. Instale e configure o PostgreSQL.
2. Crie um banco de dados chamado `banco_digital`.
3. Edite as configurações em `application.properties` para incluir suas credenciais:
```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/banco_digital
spring.datasource.username=user
spring.datasource.password=user
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
```
---
### 3. Inicialize a Aplicação
#### Perfil H2 (memória)
Para usar o banco H2 para testes rápidos, inicie a aplicação com o perfil `h2`:
```bash
mvn spring-boot:run -Dspring-boot.run.profiles=h2
```
#### Perfil PostgreSQL
Para usar o PostgreSQL, inicie a aplicação normalmente:
```bash
mvn spring-boot:run
```
A aplicação estará disponível em:
[http://localhost:8090](http://localhost:8090) - Coloque a porta que desejar.
---
## Arquivo Flyway
#### **Tabela Pessoa Física**
```
CREATE TABLE tb_pessoa_fisica (
pessoa_fisica_id SERIAL PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
cpf VARCHAR(14) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
saldo NUMERIC(15, 2),
senha VARCHAR(20) NOT NULL,
CONSTRAINT chk_cpf_format CHECK (cpf ~ '^[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}\\-[0-9]{2}$'),
CONSTRAINT chk_senha_length CHECK (LENGTH(senha) BETWEEN 8 AND 20)
);
```
---
#### **Tabela Pessoa Lojista**
```
CREATE TABLE tb_pessoa_lojista (
pessoa_lojista_id SERIAL PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
cnpj VARCHAR(18) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
saldo NUMERIC(15, 2),
senha VARCHAR(20) NOT NULL,
CONSTRAINT chk_cnpj_format CHECK (cnpj ~ '^[0-9]{2}\\.([0-9]{3}){2}\\/([0-9]{4}){2}\\-[0-9]{2}$'),
CONSTRAINT chk_senha_length_logista CHECK (LENGTH(senha) BETWEEN 8 AND 20)
);
```
## 📂 Estrutura do Projeto
```plaintext
src/
├── main/
│ ├── java/
│ │ ├── com.example.bancodigital/
│ │ ├── config/ # Configurações do Spring (Security, Flyway, etc.)
│ │ ├── controllers/ # Controladores (API REST)
│ │ ├── services/ # Serviços (lógica de negócio)
│ │ ├── repositories/ # Repositórios (JPA)
│ │ ├── models/ # Modelos de domínio
│ │ ├── dto/ # Data Transfer Objects
│ ├── resources/
│ ├── application.properties
│ ├── db/migration/ # Scripts do Flyway
├── test/ # Testes com JUnit e Mockito
docker-compose.yml # Configuração do Docker
pom.xml # Arquivo Maven
```
---
## 📝 Configurações (`application.properties`)
### Configuração Básica
```properties
spring.application.name=padrao-camadas
# H2 Database
spring.datasource.url=jdbc:h2:mem:banco_digital
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=user
spring.datasource.password=user
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
```
### Flyway
```properties
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
```
### E-mail
```properties
spring.mail.host=sandbox.smtp.mailtrap.io
spring.mail.port=465
spring.mail.username=2a6aff94c403f1
spring.mail.password=48494d7c3f090c
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
```
### Segurança
```properties
#spring.security.enabled=false
```
---
## 🛡️ Testes
Execute os testes automatizados com:
```bash
mvn test
```
---
## 📜 Licença
Este projeto está licenciado sob a [MIT License](LICENSE).
---
## Diagrama da UML
[Padrão Camadas.pdf](https://github.com/user-attachments/files/18503102/Diagrama.do.Banco.Digital.-.3Core.drawio.pdf)