Sistema de votos em tempo real, onde uma enquete pode ser criada, o usuário pode votar em uma das opções de uma enquete e isso é refletido automaticamente via websocket para visualização em tempo real.
- Clone o repositório com (
git clone https://github.com/juanvieiraprado99/polls.git
) - Instalar as dependências do projeto (
pnpm install
); - Subir container com Redis e PostgreSQL (
docker compose up -d
); - Copie o arquivo
.env.example
(cp .env.example .env
); - Rodar a aplicação (
pnpm run dev
); - Para testar as chamadas é possível utilizar o Hoppscotch, pessoalmente prefiro o Insomnia.
Criar uma nova enquete.
{
"title": "Qual é o melhor framework?",
"options": ["Angular", "React", "Vue", "Next"]
}
{
"pollId": "a06fa8a5-209d-4829-8256-98e5d099b858"
}
Retorna detalhes de uma enquete.
{
"poll": {
"id": "a06fa8a5-209d-4829-8256-98e5d099b858",
"title": "Qual é o melhor framework?",
"options": [
{
"id": "0d79ffac-22d0-4417-9f7c-910f7e8ae8d4",
"title": "Angular",
"score": 1
},
{
"id": "6e504cbf-0882-42cf-aada-7b5588712374",
"title": "React",
"score": 0
},
{
"id": "c385f034-05f7-4914-ad64-f459740b45d3",
"title": "Vue",
"score": 0
},
{
"id": "1d41d6e9-c13b-4347-b90b-6bbb9423859c",
"title": "Next",
"score": 0
}
]
}
}
Adiciona um voto em uma enquete especifica.
{
"pollOptionId": "0d79ffac-22d0-4417-9f7c-910f7e8ae8d4"
}
Rota de WebSocket para retornar a quantidade de votos em tempo real.
{
"pollOptionId": "0d79ffac-22d0-4417-9f7c-910f7e8ae8d4",
"votes": 1
}