Skip to content

caioantoniodev/votes-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VOTES-API

As premissas:

A solução deve ser executada na nuvem e promover as seguintes funcionalidades através de uma API REST:

  • 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
  • Integração com sistemas externos
    • GET https://user-info.herokuapp.com/users/{cpf}
    • Caso o CPF seja inválido, a API retornará o HTTP Status 404 (Not found). Você pode usar geradores de CPF para gerar CPFs válidos
    • Caso o CPF seja válido, a API retornará se o usuário pode (ABLE_TO_VOTE) ou não pode (UNABLE_TO_VOTE) executar a operação
  • O resultado da votação precisa ser informado para o restante da plataforma, isso deve ser feito preferencialmente através de mensageria. Quando a sessão de votação fechar, poste uma mensagem com o resultado da votação
  • Aplicação possa ser usada em cenários que existam centenas de milhares de votos. Ela deve se comportar de maneira performática nesses cenários

A abordagem foi utilizar uma arquitetura orientada a eventos, utilizando Rqueue para o gerenciamento dos eventos, Redis para notificações dos eventos, além de Kafka para notificação do resultado final da Sessão de votação de uma Pauta.

Documentação

A documentação foi utilizado o Redoc para gerar o arquivo Html para ser disponibilizado o contrato e mais informações do comportamento da Api. A documentação pode ser encontrada no caminho http://<ip_da_aplicação:porta_da_aplicação/

Como Executar

A solução utiliza Java na versão 17, certifique de ter instalado. Assim como um banco de dados, recomentando Postgres, uma instância do Redis e também uma instância do Kafka configurado.

O arquivo docker-compose contém as configurações dos containers, de exemplo, para execução.

Com banco de dados, Redis e Kafka execute: mvn spring-boot:run

Controle de versão

Controle de versão adotado foi adoção no dominio da api, Exemplo: https://ap.v1.coopvotes.online Toda resposta da API contém um Header com chave Version-Api e o valor a versão da API exemplo: 1.0.0.

Dependências:

About

API for mentorship

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors