An open API service indexing awesome lists of open source software.

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: 2 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.

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 [![Bank](https://img.shields.io/badge/Bank-43B02A?style=flat&logo=bank&logoColor=white)](https://viewer.diagrams.net/?tags=%7B%7D&highlight=0000ff&edit=_blank&layers=1&nav=1&title=padrao-camadas-arquitetura.drawio#R7V1dc6O4Ev01fhwXkvh8TJxk51ZldrM3W7V7n1KKUWx2MHIBtuP59VdggUGCQGxAToKnyhUEMoI%2B6j7d6tZM0Gz1%2BluI18sf1CX%2BBGru6wTdTCAEusG%2Bk4b9oeEbhPqhZRF67qFNOzY8er8I75m1bjyXRLzt0BRT6sfeutw4p0FA5nGpDYch3ZUve6G%2BW2pY4wUpDSNpeJxjn0iX%2Fe258fLQCg2tcPl34i2WsXjmGc9%2FLkK6CfgNJxBp6edweoWzH%2BMN0RK7dFdoQrcTNAspjQ9%2FrV5nxE9ebvm93dWczQcekiBu0%2BGf7%2F%2FR4vu%2Fvv8R%2Fa7P9T%2FX21%2Fz4Jtu8cHF%2B%2ByNEJe9IH5Iw3hJFzTA%2Fu2x9Tp9aJL8LGBHx2vuKV3zxn9JHO%2B5tPEmpqxpGa98fvbFp7urwGOvyKMBb4vikP7MZcDezvV8E27Tu2j56Rn1aZgOE92lH3bm8ADJqGtfDG%2BK6CackzfeBuQAxOGCxG9cB2AuPzYxCF2RONyzjiHx2SNtywPBHKGL%2FDre9SoM8b5wwZp6QRwVfvkhaWAXZJMNZNjikw0goyRy9sfhN7OjwuCOTSks3gER%2FlK22N%2BQDOkCZNKRk%2FB2S5IH4PLM4J5Iz8XRMhdlAQiSVDXt7k5LLnrxfL%2BqHUfrgxp48V6TX7z28TPxH2jkcSzNSTIUdmJLwthjE%2F1euOCZxjFdFS648r1FciJO0HuN%2BVH%2BO3QT%2B17ABpkpIO3wdOvk4Vevi0QvTrdbdxrFNEy1jYBllIM0uSN5fRumMqqyDpoliB%2FaaGpxBbw7Ki9kTXnjsqC4OFQq4VgA0An4GFVI4W2glirEVqJBkGaVIaTpgtF4b49%2BdI4FVGCKCTvc%2F5OgJZlW%2FPh%2FxZM3rxxLh6N9CVknAK8KxQrAaKoxZw4qQcvhUu8VWWhYa5bYrSprxtsv2JqtQxqzK9hdnhKWu35iDPzFW0hoTx6c9XI9docbLzx0Ye1JE%2FaTZ6dBXHj2l%2FTTkUmEgkl0TE0yh5nhKxlDMDX0nuyhPiTCZrPU45AQlrdfMMIiwrSkF%2B97I0zIMaeaIVBmnSl3q4ozOTJMdGcKUU8wMS6BVueG6IJhwhSQS1Y4cJ8i4r%2Bwr3DrJVavG07tCJwawHYaRIcZye6eUBsjoRa4SQsOg9RwGLusXxx7AHZsNquObCLheZwI53q39GLyuMbpq96xuVWlMIr69x2eObc0XUxHINhz25FnI6qajb05t%2FY4FwWntU18TM1kRGJ8DBiN3u3bPfqZv7o%2Bgur9oDoXU2fpAbtZ5VYSmjrnp84hrFC74OZ61iHvKiKCDY7DBcDsmD9QFRvDu0if4vXaZ7dJHUPXi%2BaU3XefsbIndkmhFS9SNAgw06v45pqEHhMVCRMj5QWL4xCOdLcLCwNNYcbnUdWCibGqXMa%2BTAxSEuu6VG0A2q7BnLsEc5bMslGOiyLKnXxgXrCTr8uw%2BMpz%2B7IXR6AUC2iij009%2BqGPoEUMuy8yws%2BUVJcCZiLTh2plK9OXBY7JDu%2BffIrdp2fs42Ce3rwf5STGpwGwWwaoe3NozVEjFaaSMZDzcZpG0oGC6BJoEZnuPrxUt5DRaXhJ18TwEpBJQsVsRE5f3F%2BTXu1Xno1tY72q8q9Ec4%2F4XKklCE09eoovjR7lSahSo%2BShGIMUEjn7wYgx8oBTMGKcCZHzog4tFn4ayXhRGjXhhPpXXs3kq8i3xO5FNj5PooRPEX4h05jMlwG722L%2F5M1pEE2Tb1hNHGrihF2wA2CiqRBIyBeWCgRBRwPSdYTGaVqYAFbLaapfBF1n1r4hgNDUoyd%2BMLLOU0CliB%2FoQAk%2FGLO6T8GIoZYgWL0ShNxHr%2Ffe1ROELpgAcmQmgCprLYYlAyNnL4K9beKAGjJgKCnWAi0SFcbs4yGqtXQx9AMrQv8Dl2oBp1f7UONAuuQFb%2Fx4WOsAdEmyoBvJOqJgtZYpw8juLWXYUsLoj%2FVSk0KxVLF46oPVS2WCvNSCKSHPweHavj78rL%2FZoad6YU2FkmFn4I1lDk5CJ%2F0WOIn1CU5FQAraU6f0MQc0KZYs3CE1Dzhb89Qrm5JO6lvzwJaaB5zrYJ4YhHDeqXp0Q4Xqgb2qnhr%2FN6ABGV7rdMJR7QvXLrBFqtOnCWj0R1mBIWU9q%2Bes0FHLWacGQmXroTmwwXykRw%2FZEtQbpuEiAiRt0y3BuXT2vKiWkmqYehw0bfbwoTCgt4XAuSm350FAScVrAQKmVUTAN6YKNPSZYNBeFVhKcaDaJFhsBEVVMNXgp8JBa3VwLgxO9DKguByOmhbQG3r0tICupCq4gFOkm2XqYh%2BB%2Bxlw2roK7GzqcmIkzrLfCdSmHj2t4quNzjBuVYJpA0QvFY1G27BwN8GZCi0n5q1bgsN9GBnvJhjhLmDUwg3%2FwivRrfGhRlnlJQ1ZlEdrKmsTOthmk3ITdkEROvSk21qsM7Qpg2P%2F7pLb5ruYCXE9IWZkmhxAlUHAj1sY94yDnx1Fm6ApwKGixN6sCDaZfYURjUE32%2FrIWRG9bralG06ZA13AZluGaipv6LrgciL7M1H5thWWh9wUVZEHQ3XkwSh7dAwGxqcKRreFQWFr%2FGFTK8yyasoW3us5T0OPnrZ%2BU70xMjDECJlpfiqctgYqVKmvTCV1QQUcSEbrU8Wf2qNA6a5kppKE8AIKYDm%2BM%2F1UJivLlr1Qt14TasfsQeyPap5kiYhryviqhNzFJqC2XqdTkwZm2EjAHOwfc5YcfXzAbjiZockVouzEDK8w884lZDJXNZakyQM1kotcsTO2Jnj6orO98lw3BXjV9idl0C98HEW14BMiUvmeJ8Xojhj9MfjxHV55fiKOvxjC2TvQfic79v1fyrz4bvx2R4w%2Ba1wgBa8doIpCqKxeqfukU3mP%2Fdsde0Q2JZMnd0NvsSEd4oFfcz4UNEGIZjshJgN%2FzGJRQAaMYP3OzBWDllj8hiq2YQZZhWhJ4r2lGctbHzxM2fGdFzExfABJo6pp3qHUgJBva0N5klbFXPuTmFyLmkrsnv7rRfEoMjarxFUT5SKTiwcffzyOksr%2FzysxmV2dpORCvlFSk7ROwb4sSdnyKuXttxX2%2FFFYDjIFouE4qqUFRmnVTS1TQ4KwFJsrG0rCutrENPR%2B4dQ3tHIP8cvLDoobiSqXnezT%2F3bYmXeUFkCwTDeAlu3Wp0xcssN9T7HLWq6zLZRHsUEgpHgCQ7U5k%2FNeHpOMjoN6TEJnLmFft8HWG7UkkxdwpkKd6%2FH%2F3C7IMJsNw8hQjnyMMmzvVB%2FX6ZUJUA6EXOP5TxK4o7jYjBN0ZtWOm8OKSw6CjOKqZSbqxSVHQq4ZIcn14g126UdYCejb13ZEXxtAU1crOkcOjYyiq1qQyRIRLkdycpjkkSw2IQ4OrGSM7lds646qd5AcVnByyGQUnGjjgHmBgpPjJVxXfnl5SdUmqLdgCTsMKY2L6S1J5cQP6pLkiv8D)

- **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)