Esse sistema é um simples sistema de banco com suporte a conta corrente e operações de: depósito, saque e transferência de dinheiro.
A arquitetura hexagonal foi utilizada para separar a lógica de negócios, domínio e validações do módulo de infraestrutura, onde são tratadas as dependências tecnológicas do projeto.
O spring security não foi utilizado numa tentativa de manter a aplicação o mais simples e didática possível. Logo, os endpoints são públicos e não necessitam de token de acesso para serem utilizados.
Por questões de simplicidade, a senha do usuário é encriptada apenas mapeando seus caracteres para códigos ASCII. Inclusive, as senhas encriptadas (não as originais) são mostradas nas respostas e, geralmente, são dados sensíveis de serem mostrados assim.
-
Conta
- Criação de conta
- Alteração de conta
- Remoção de conta
- Retorno de conta pelo ID
- Retorno de conta pelo username do usuário
- Retorno de conta pelo email do usuário
- Listagem de todas as contas
- Depósito em conta corrente
- Saque em conta corrente
- Transferência em conta corrente
-
Usuário
- Alteração de senha
- Listagem de usuários
Todas as subpastas abaixo estão na pasta italo/sisbanco/.
-
core : Núcleo do sistema (independente de tecnologias externas)
- domain : Responsável pela definição das entidades de domínio utilizadas na implementação da lógica de negócios.
- validation : Onde fica a lógica das validações.
- exception : Onde estão as classes de exceção de Domínio e Negócio com as mensagens de erro.
- ports : Onde estão as interfaces de entrada e saída do módulo core.
- in : Onde são definidas as interfaces de serviços implementados no pacote de serviceimpl.
- out : Onde são definidas as interfaces implementadas fora do core que dependem de tecnologias externas.
- serviceimpl : Onde está toda a lógica de negócio independente das tecnologias externas utilizadas no projeto.
-
infra : Onde fica toda parte que utiliza tecnologias externas
- config : Onde são definidas as configurações do spring boot e os beans que são instâncias das implementações da lógica de negócio.
- persistence : Onde são definidos os repositórios e mapeamento de entidades do banco de dados.
- entity : Onde são definidos os mapeamentos das entidades do banco de dados
- repository : Onde são definidos os repositórios JPA da aplicação para manipuçação do banco de dados
- service : Onde são definidos os adaptadores que são, também, beans de Services do spring boot. Esses adaptadores implementam portas out do módulo core
- mapper : Onde são definidas as classes com métodos de mapeamento das entidades, classes de domínio e dtos do sistema
- util : Onde ficam as classes utilitárias. Nesse caso há apenas a classe de encriptação de passwords com um algorítmo facilmente quebrável
- entrypoint : Onde ficam os controllers e toda a parte utilizada apenas no controller
- controller : Onde ficam as implementações dos endpoints do sistema
- dto : Onde ficam as classes que mapeiam os JSONs de entrada e saída dos endpoints
- apidoc : Onde ficam as implementações das anotações de documentação do sistema
- exception : Onde fica a lógica de captura das exceções pelo spring boot. Classes anotadas com @ControllerAdvice.
- core
- domain : Onde ficam os testes das validações das entidades de domínio.
- serviceimpl : Onde ficam todos os testes da implementação da lógica de negócio.
- infra
- mapper : Onde ficam os testes dos mappers do sistema.
- service : Onde ficam os testes dos services adaptadores
- controller : Onde ficam os testes dos endpoints do sistema
O sistema é um microserviço só e depende apenas do jdk, versão 17, e de um banco de dados postgresql configurável no arquivo "application.properties" da aplicação.
- driver: org.postgresql.Driver
- url: jdbc:postgresql://localhost:5432/sisbanco
- username: postgres
- password: postgres
Para rodar o sistema é necessário que o banco de dados "sisbanco" já tenha sido criado!
Para fazer o build e empacotamento da aplicação, utilize o seguinte comando:
./mvnw clean package
Para rodar, após o build bem sucedido, basta executar o jar que foi gerado e colocado na pasta "target/":
java -jar sisbanco-1.0-SNAPSHOT.jar
Para rodar o swagger, abra seu navegador preferido e acesse o swagger pela seguinte url:
http://localhost:8080/swagger-ui.html
Para rodar a release, basta baixar o jar disponível no github como release para este projeto e configurar o banco de dados conforme já mostrado anteriormente. Rode o jar com o seguinte comando:
java -jar sisbanco-1.0-SNAPSHOT.jar
O jar baixado corresponde ao mesmo jar gerado pelo maven no empacotamento da aplicação.
Este projeto fez bom uso da arquitetura hexagonal para separar a lógica de negócio e de domínio do restante da aplicação. Todo o módulo de core, não tem dependência direta de outras tecnologias mas, sim, é utilizado pelo módulo de infraestrutura da aplicação.
Espero que gostem do projeto e, até o próximo...