API Rest de assembleias, gerenciamento de Associados, Pautas e Sessões de votação
Neste projeto, foi utilizado conceitos de Clean Architecture, DDD, TDD e as boas práticas atuais de mercado
- JDK 17
- IDE de sua preferência
- Docker
- Clonar o repositório:
git clone https://github.com/arthur1470/dbc-desafio-assembleia.git
- Subir o banco de dados MySQL com Docker:
docker-compose up -d
- Executar a aplicação como SpringBoot app:
./gradlew bootRun
Também é possível executar como uma aplicação Java através do método main() na classe Main.java do Modulo Infrastructure
Consulte a documentação dos endpoints com o swagger. Após executar a aplicação, acesse a URL abaixo:
http://localhost:8080/api/swagger-ui/index.html
O banco de dados principal é um MySQL e para subir localmente vamos utilizar o Docker. Execute o comando a seguir para subir o MySQL:
docker-compose up -d
Pronto! Aguarde que em instantes o MySQL irá estar pronto para ser consumido na porta 3306.
Caso seja a primeira vez que esteja subindo o banco de dados, é necessário
executar as migrações SQL com a ferramenta flyway
.
Execute o comando a seguir para executar as migrações:
./gradlew flywayMigrate
Pronto! Agora sim o banco de dados MySQL está pronto para ser utilizado.
A collection para importar no postman, se encontra na raíz do projeto, na pasta postman.
Para atender a esse requisito, foi implementado em Infrastructure > api > V1 > Clients > DefaultUsersClient. Um client que consulta uma API externa(usei outra api que encontrei na internet, pois a mencionada no documento "GET https://user-info.herokuapp.com/users/{cpf}" não está disponível) e retorna se o CPF é válido. Nesta mesma função, de maneira aleatória, retorna se o Associado está "ABLE_TO_VOTE" ou "UNABLE_TO_VOTE"
Este requisito pode ser resolvido utilizando algum sistema de filas, como RabbitMQ ou ApacheKafka, para poder processar os dados da requisição de maneira assíncrona
O versionamento foi feito na estrutura de Infrastructure > api, através da URL adicionando o prefixo da versão, exemplo: /api/v2/associates