{"id":24731561,"url":"https://github.com/ewertondrigues02/banco-digital","last_synced_at":"2026-04-11T06:34:16.375Z","repository":{"id":272839329,"uuid":"917923017","full_name":"ewertondrigues02/banco-digital","owner":"ewertondrigues02","description":"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.","archived":false,"fork":false,"pushed_at":"2025-03-15T17:21:53.000Z","size":172,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T18:25:32.622Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ewertondrigues02.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-16T22:33:14.000Z","updated_at":"2025-03-15T17:21:56.000Z","dependencies_parsed_at":"2025-02-09T01:20:26.652Z","dependency_job_id":"3f992d24-ba96-4572-b6ad-bbf3505e1f1c","html_url":"https://github.com/ewertondrigues02/banco-digital","commit_stats":null,"previous_names":["ewertondrigues02/banco-digital"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewertondrigues02%2Fbanco-digital","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewertondrigues02%2Fbanco-digital/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewertondrigues02%2Fbanco-digital/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewertondrigues02%2Fbanco-digital/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ewertondrigues02","download_url":"https://codeload.github.com/ewertondrigues02/banco-digital/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244981293,"owners_count":20542288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2025-01-27T16:51:51.065Z","updated_at":"2025-12-30T23:46:40.224Z","avatar_url":"https://github.com/ewertondrigues02.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# Banco Digital - Nos 4 Padrões de Projeto mais Utilizados\n\n\nEste 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**:  \n- **Padrão em Camadas**   -   Em Desenvolvimento - Diagrama Conceitual [![Bank](https://img.shields.io/badge/Bank-43B02A?style=flat\u0026logo=bank\u0026logoColor=white)](https://viewer.diagrams.net/?tags=%7B%7D\u0026highlight=0000ff\u0026edit=_blank\u0026layers=1\u0026nav=1\u0026title=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)\n\n- **Factory Method**   -   Na Fila de Desenvolvimento\n- **Singleton**   -   Na Fila de Desenvolvimento\n- **MVC**   -   Na Fila de Desenvolvimento\n\nO objetivo é demonstrar as diferenças e benefícios de cada abordagem, mantendo uma base tecnológica robusta e moderna.\n\n---\n\n## 🛠 Tecnologias Utilizadas  \n\n### 🔹 Backend  \n\n- **Java 21** – Linguagem principal do projeto, utilizada para desenvolver a aplicação com alto desempenho e segurança.  \n- **Spring Boot 3.4.1** – Framework para facilitar a configuração e desenvolvimento de aplicações Java baseadas em Spring.  \n- **Spring Data JPA** – Abstração para facilitar a persistência de dados utilizando o Hibernate e o banco de dados relacional.  \n- **Spring Web** – Permite a criação de APIs REST e configuração de controllers HTTP na aplicação.  \n- **Spring Security** – Módulo para gerenciamento de autenticação e autorização, garantindo a segurança da aplicação.  \n- **JWT (JSON Web Token)** – Utilizado para autenticação segura e controle de acesso à API.  \n- **Spring Boot Mail** – Módulo para envio de e-mails transacionais dentro da aplicação.  \n- **Spring Validation** – Utilizado para validar os dados de entrada da aplicação de forma eficiente.  \n\n### 🔹 Banco de Dados  \n\n- **PostgreSQL** – Banco de dados relacional utilizado para armazenar os dados da aplicação.  \n- **Amazon RDS** – Serviço de banco de dados gerenciado na nuvem para escalabilidade e alta disponibilidade.  \n- **H2 Database** – Banco de dados em memória utilizado para testes e desenvolvimento.  \n- **Flyway** – Ferramenta de versionamento e migração do banco de dados, garantindo controle sobre as alterações estruturais.  \n\n### 🔹 Testes  \n\n- **JUnit e Mockito** – Ferramentas para criação e execução de testes unitários e mock de dependências.  \n- **Bacon H2** – Biblioteca auxiliar para simplificação e otimização de testes com banco de dados H2.\n- **Apache JMeter** - Ferramenta para testes de carga e desempenho de aplicações.\n- **OWASP ZAP** – Ferramenta de segurança para testes de vulnerabilidades em aplicações web.  \n\n### 🔹 Documentação e Monitoramento  \n\n- **Swagger** – Ferramenta para documentação interativa de APIs, permitindo testes e visualização dos endpoints.  \n- **Spring Boot Actuator** – Fornece métricas, monitoramento e endpoints para gerenciar a aplicação em tempo real.  \n- **Prometheus** – Sistema de monitoramento e coleta de métricas para análise do desempenho da aplicação.  \n- **Grafana** – Plataforma para visualização de métricas e dashboards baseados em dados coletados pelo Prometheus.  \n\n### 🔹 Infraestrutura  \n\n- **Docker** – Plataforma de conteinerização que permite empacotar e executar a aplicação de forma isolada.  \n\n\n---\n\n## 📦 Pré-requisitos\n\n1. **Java 21**  \n   - Verifique a instalação:  \n     ```bash\n     java -version\n     ```\n\n2. **Maven 3.8+**  \n   - Verifique a instalação:  \n     ```bash\n     mvn -version\n     ```\n\n3. **Docker**  \n   - Verifique a instalação:  \n     ```bash\n     docker --version\n     ```\n\n4. **PostgreSQL (opcional)**  \n   - Caso não utilize Docker, configure o banco de dados manualmente.\n\n---\n\n## 🚀 Como Usar\n\n### 1. Clone o Repositório\n\n```bash\ngit clone https://github.com/ewertondrigues02/banco-digital-padroes.git\ncd banco-digital-padroes\n```\n\n---\n\n### 2. Configuração do Banco de Dados\n\n#### Usando Docker\nExecute o seguinte comando para iniciar o container do PostgreSQL:  \n```bash\ndocker-compose up -d\n```\n\n#### Configuração Manual (sem Docker)\n1. Instale e configure o PostgreSQL.  \n2. Crie um banco de dados chamado `banco_digital`.  \n3. Edite as configurações em `application.properties` para incluir suas credenciais:\n\n```properties\nspring.datasource.url=jdbc:postgresql://localhost:5432/banco_digital\nspring.datasource.username=user\nspring.datasource.password=user\nspring.jpa.hibernate.ddl-auto=update\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect\n```\n\n---\n\n### 3. Inicialize a Aplicação\n\n#### Perfil H2 (memória)\nPara usar o banco H2 para testes rápidos, inicie a aplicação com o perfil `h2`:\n```bash\nmvn spring-boot:run -Dspring-boot.run.profiles=h2\n```\n\n#### Perfil PostgreSQL\nPara usar o PostgreSQL, inicie a aplicação normalmente:\n```bash\nmvn spring-boot:run\n```\n\nA aplicação estará disponível em:  \n[http://localhost:8090](http://localhost:8090)  - Coloque a porta que desejar.\n\n---\n\n## Arquivo Flyway\n\n#### **Tabela Pessoa Física**\n```\nCREATE TABLE tb_pessoa_fisica (\n   pessoa_fisica_id SERIAL PRIMARY KEY,\n   nome VARCHAR(255) NOT NULL,\n   cpf VARCHAR(14) NOT NULL UNIQUE,\n   email VARCHAR(255) NOT NULL UNIQUE,\n   saldo NUMERIC(15, 2),\n   senha VARCHAR(20) NOT NULL,\n   CONSTRAINT chk_cpf_format CHECK (cpf ~ '^[0-9]{3}\\\\.[0-9]{3}\\\\.[0-9]{3}\\\\-[0-9]{2}$'),\n   CONSTRAINT chk_senha_length CHECK (LENGTH(senha) BETWEEN 8 AND 20)\n);\n\n```\n\n---\n\n#### **Tabela Pessoa Lojista**\n```\nCREATE TABLE tb_pessoa_lojista (\npessoa_lojista_id SERIAL PRIMARY KEY,\nnome VARCHAR(255) NOT NULL,\ncnpj VARCHAR(18) NOT NULL UNIQUE,\nemail VARCHAR(255) NOT NULL UNIQUE,\nsaldo NUMERIC(15, 2),\nsenha VARCHAR(20) NOT NULL,\nCONSTRAINT chk_cnpj_format CHECK (cnpj ~ '^[0-9]{2}\\\\.([0-9]{3}){2}\\\\/([0-9]{4}){2}\\\\-[0-9]{2}$'),\nCONSTRAINT chk_senha_length_logista CHECK (LENGTH(senha) BETWEEN 8 AND 20)\n);\n```\n\n## 📂 Estrutura do Projeto\n\n```plaintext\nsrc/\n├── main/\n│   ├── java/\n│   │   ├── com.example.bancodigital/\n│   │       ├── config/         # Configurações do Spring (Security, Flyway, etc.)\n│   │       ├── controllers/    # Controladores (API REST)\n│   │       ├── services/       # Serviços (lógica de negócio)\n│   │       ├── repositories/   # Repositórios (JPA)\n│   │       ├── models/         # Modelos de domínio\n│   │       ├── dto/            # Data Transfer Objects\n│   ├── resources/\n│       ├── application.properties\n│       ├── db/migration/       # Scripts do Flyway\n├── test/                       # Testes com JUnit e Mockito\ndocker-compose.yml              # Configuração do Docker\npom.xml                         # Arquivo Maven\n```\n\n---\n\n## 📝 Configurações (`application.properties`)\n\n### Configuração Básica\n```properties\nspring.application.name=padrao-camadas\n\n# H2 Database\nspring.datasource.url=jdbc:h2:mem:banco_digital\nspring.datasource.driverClassName=org.h2.Driver\nspring.datasource.username=user\nspring.datasource.password=user\nspring.h2.console.enabled=true\nspring.h2.console.path=/h2-console\nspring.jpa.hibernate.ddl-auto=create-drop\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect\n```\n\n### Flyway\n```properties\nspring.flyway.enabled=true\nspring.flyway.locations=classpath:db/migration\n```\n\n### E-mail\n```properties\nspring.mail.host=sandbox.smtp.mailtrap.io\nspring.mail.port=465\nspring.mail.username=2a6aff94c403f1\nspring.mail.password=48494d7c3f090c\nspring.mail.properties.mail.smtp.ssl.enable=true\nspring.mail.properties.mail.smtp.auth=true\nspring.mail.properties.mail.smtp.starttls.enable=true\n```\n\n### Segurança\n```properties\n#spring.security.enabled=false\n```\n\n---\n\n## 🛡️ Testes\n\nExecute os testes automatizados com:  \n```bash\nmvn test\n```\n\n---\n\n## 📜 Licença\n\nEste projeto está licenciado sob a [MIT License](LICENSE).\n\n---\n\n## Diagrama da UML\n\n\n[Padrão Camadas.pdf](https://github.com/user-attachments/files/18503102/Diagrama.do.Banco.Digital.-.3Core.drawio.pdf) \n\n\n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fewertondrigues02%2Fbanco-digital","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fewertondrigues02%2Fbanco-digital","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fewertondrigues02%2Fbanco-digital/lists"}