Este projeto trata-se de um desafio da South System, ele consiste basicamente em uma API REST para realizar alguns fluxos de cadastro e votação de Pautas em uma Sessão. As tecnologias usadas para isso foram Java, Spring Boot, Kafka, Flyway, Postgres e Swagger.
Esse projeto foi desenvolvido baseando-se no contexto de cooperativismo, onde cada associado possui um voto e as decisões são tomadas em assembleias, por meio de votações. A proposta da API aqui desenvolvida era solucionar o gerenciamento dessas sessões de votação.
- Cadastrar uma nova pauta;
- Abrir uma sessão de votação em uma pauta (a sessão de votação deve ficar aberta por um tempo determinado na chamada de abertura ou 1 minuto por default);
- Receber votos dos associados em pautas (os votos são apenas 'Sim'/'Não'. Cada associado é identificado por um id único e pode votar apenas uma vez por pauta);
- Contabilizar os votos e dar o resultado da votação na pauta.
Durante o processo de desenvolvimento foram feitas algumas anotações no Notion, no link abaixo você pode ver algumas abstrações, solução técnica e alguns diagramas de classe e ER.
Se você quiser fazer alguma modificação no código precisará ter instalado em sua máquina as seguintes ferramentas:
Este projeto conta com um docker-compose, inclusive a própria imagem da aplicação já está configurada para ser executada no docker.
Os requisitos para isso são:
- Docker - Baixe de acordo com o seu SO
- Docker-compose - Se estiver utilizando Windows, o Docker desktop já possui o docker-compose instalado
A imagem da aplicação também está disponível no Docker Hub:
Caso queria executa-lá através dessa imagem, abaixo tem alguns comandos que podem lhe ajudar:
docker pull matheuscarv69/back-votes-challenge
O comando abaixo executa a imagem baixada em um container, essa aplicação possui algumas env vars, atenção para as que possuem o sufixo HOST, neste você deve colocar o ipv4 da sua máquina.
docker run -d -p 8080:8080 -e SERVER_PORT=8080 -e DATABASE_URL="192.168.0.115:5432" -e DATABASE_DB="postgres" -e DATABASE_USER="postgres" -e DATABASE_PASSWORD="password" -e DB_SCHEMA="backvotes" -e DELAY_SCHELUDED_CHECK_SESSION="10000" -e KAFKA_HOST="192.168.0.115:29092" matheuscarv69/back-votes-challenge
Com esse repositório já clonado em sua máquina e com todos os pré-requisitos atendidos.
- Você deve ir até a raiz do projeto onde o arquivo docker-compose.yml está.
- Deve abrir um terminal na raiz do projeto.
- Agora certifique-se que o seu Docker já está em execução.
- Execute o seguinte comando no terminal:
docker-compose up -d
- Com isso sua aplicação já está em execução por padrão na porta local 8080
ENV_VARS | Descrição |
---|---|
SERVER_PORT | Porta que a aplicação utilizará em sua execução. (Default: 8080) |
DATABASE_URL | Url do banco de dados utilizado. (Default: localhost:5432; Postgres) |
DATABASE_DB | Banco de dados utilizado dentro. (Default: postgres) |
DATABASE_USER | Usuário do banco de dados. (Default: postgres) |
DATABASE_PASSWORD | Senha do banco de dados. (Default: password) |
DB_SCHEMA | Esquema do banco de dados. (Default: backvotes) |
DELAY_SCHELUDED_CHECK_SESSION | Delay em milisegundos do Scheduled para verificar se sessão está fechada e buscar resultados de votação. (Default: 10000 = 10 segundos) |
KAFKA_HOST | Url do Kafka. (Default: localhost: 29092) |
Essa aplicação tem um workspace compartilhado com o projeto Back Votes Kafka Consumer com todas as requisições disponíveis configurado no aplicativo Insomnia, clicando no botão abaixo você pode baixar o workspace de requests utilizados nesse projeto.
A pasta com as Requests do Back Votes Kafka Consumer é chamada Kafka Consumer.
Além disso a mesma foi documentada usando o Swagger, por meio dele você também pode ter acesso as requisições e aos modelos de dados recebidos e enviados pela aplicação. Com a aplicação sendo executada, você pode acessar a página do Swagger por meio da url abaixo.
http://localhost:8080/api/v1/backvotes/swagger-ui/
Você acessará essa tela:
Foi disponibilazada um API externa para verificar o CPF e a partir do response retornar autorizar ou não a votação do Associado.
https://user-info.herokuapp.com/users/%7Bcpf%7D
Essa é uma API que foi desenvolvida para ser o Kafka Consumer para este Projeto, no link abaixo você pode acessar toda a documentação e a aplicação.
https://github.com/matheuscarv69/back-votes-challenge-kafka-consumer
As seguintes tecnologias foram utilizadas no desenvolvimento do projeto.
- Java 11
- Spring Boot 2.5.4
- Web
- Data JPA
- Feign
- Validation
- Profiles (dev)
- Swagger
- Flyway
- Postgres
- Kafka
Matheus Carvalho 🚀
Feito por Matheus Carvalho, entre em contato!✌🏻