Node Polls é um sistema backend, construído em Node.js, no qual realiza enquetes com atualização em tempo real do score de votação através de websockets.
- Clone este repositório:
git clone https://github.com/atlas-jedi/node-polls.git
- Instale as dependências (Node v20.11.0):
cd node-polls
npm install
- Inicie os containers (Postgresql e Redis)
docker compose up -d
- Execute o servidor de desenvolvimento
npm run dev
- Node.js
- Fastify
- Prisma
- Postgresql
- Redis
- WebSockets
- Typescript
O servidor HTTP é construído com Fastify, um framework web de alta eficiência por ser rápido e de baixo custo. O Prisma é usado como ORM para facilitar a interação com o banco de dados. O Redis foi utilizado para gerenciar o score de votação em conjunto de websockets para que a aplicação possua uma comunicação em tempo real das atualizações de votos de forma independente do banco de dados principal.
GET /polls/:pollId
Parâmetro | Tipo | Descrição |
---|---|---|
pollId |
string |
Obrigatório. ID da enquete a ser retornada |
POST /polls
- Corpo da requisição (JSON):
{
"title": "Nome da enquete",
"options": ["Opção 1", "Opção 2", "Opção 3"]
}
POST /polls/:pollId
Parâmetro | Tipo | Descrição |
---|---|---|
pollId |
string |
Obrigatório. ID da enquete a ser votada |
- Corpo da requisição (JSON):
{
"pollOptionId": "ID do item a ser votado"
}
- URL:
ws://localhost:3333/polls/:pollId/results
- Protocolo: WebSocket
Parâmetro | Tipo | Descrição |
---|---|---|
pollId |
string |
Obrigatório. ID da enquete para ouvir as atualizações de score |
Este endpoint fornece uma conexão WebSocket para comunicação em tempo real. A partir dessa conexão, o servidor irá enviar atualizações de score de votação especificado em tempo real.
Contribuições são sempre bem-vindas! Sinta-se à vontade para abrir um pull request com melhorias ou correções.