No cooperativismo cada associado possui um voto e as decisões são tomadas em assembleias, por votacao. Esta api é o backend da solução para este problema, considerando o seguinte:
- É possível buscar, cadastrar, atualizar e remover assembleias, pautas e itens de pauta.
- É possível votar. Cada associado é identificado por um ID único e pode votar apenas uma vez por item de pauta.
- Uma sessão de votação é atrelada a uma pauta e fica aberta por um tempo determinado ou 1 minuto por default.
- É possível buscar os resultados de votação de uma pauta.
- Um usuário deve estar autenticado para utilizar o sistema.
Para informar o resultado das votações para a plataforma, quando uma votação fecha uma mensagem com o resultado da votação é enviada para uma instância de mensageria. Atualmente para fins de simplificação e teste enviamos e recebemos essa mensagem (somos producer e consumer).
A autenticação é feita utilizando JWT, sendo que associados tem papel de USER e podem apenas votar e buscar (assembleias, pautas, etc) e os admistradores do sistema, que poderiam ser os gerentes, possuem papel de ADMIN e pode realizar todas as operações no sistema.
A API foi implementada utilizando Spring Boot, Maven, H2, PostgresQL, Lombok, Mapstruct. O serviço de mensageria utilizado foi o Kafka, sendo este utilizado junto ao Docker. A documentação foi feita utilizando Swagger, inclusive você pode dar uma olhada nela aqui. Os testes foram feitos utilizando Junit, Mockito, Jacoco e o Postman. Para controle de versionamento usamos o git seguindo alguns princípios do Gitflow. Todo o desenvolvimento foi sempre pautado no desenvolvimento com código limpo e orientado a testes (TDD).
É importante lembrar que o projeto ainda está em desenvolvimento, logo muitas melhorias e correções de possíveis bugs estão por vir. Uma cobertura maior de testes, testes de desempenho e um APP Web Angular serão provavelmente serão os próximos artefatos produzidos no projeto.
Para compilar e executar a aplicação é necessário você ter o maven e o docker instalados na sua máquina. Alguns comandos foram disponibilizados em um Makefile para automatização da execução do Kafka no docker. Para rodar um Makefile no Windows você precisa usar o comando nmake e talvez seja necessário instalar as ferramentas de build para c++.
Considerando o diretório raíz do projeto vá até o diretório kafka. Pode ser usando no terminal o comando cd kafka
. Dentro deste diretório você deve executar o comando make up
(Linux) ou nmake up
(Windows). Desta forma você terá um container docker com o Kafka rodando. Para parar basta rodar o comando make down
(Linux) ou nmake down
Windows.
Se tudo ocorreu bem, você pode voltar a para a raíz do projeto e você pode executar od seguintes comandos:
mvn spring-boot:run
para rodar a aplicação. Por default ela rodará no profile dev com o banco H2.mvn clean compile
para apenas compilar o projeto.mvn test
para rodar todos os testes implementados para a aplicação.
Poderia adiantar que o problema mais comum visto é em relação a integração da IDE Eclipse com o Lombok e o MapStruct. Para solucionar os problemas decorrentes de ambos, geralmente ajuda se você executar um mvn clean compile
e também ir até o Eclipse e fazer um clean do project.
Se você tiver qualquer dúvida, problema ou sugestão não exite em contato conosco.