API de sistema de enquetes feito em Node.Js usando conceitos de requisições HTTP e Websockets, em conjunto com as principais bibliotecas:
- Prisma - Para relacionamento com o banco de dados;
- Fastify - Para conceitos de requisições HTTP e uso de Websockets;
- Instale as dependências do projeto com o comando abaixo:
npm install
- Construa o container com o comando:
docker compose up -d
- Execute o servidor com:
npm run dev
Caso você queira ver os dados armazenados através da lib do Prisma, execute o comando:
npx prisma studio
-
No seu Postman, clique no botão "Import" no canto superior esquerdo, e selecione o arquivo JSON com todas as rotas disponíveis para uso.
-
Para acessar a rota do Websocket, crie um novo arquivo no seu Postman do tipo Websocket e use o caminho:
ws://localhost:3333/polls/{POLL_ID}/results
A aplicação consiste em criar enquetes, opções de enquetes e votar em alguma das opções da enquete. Cada enquete é independente da outra, ou seja, é possivel votar em uma opção de uma enquete, e votar em outra opção de outra enquete, sem que as 2 entrem em conflito.
Caso seja votado outra opção de uma enquete que já foi votada, o voto é excluido depois criado na nova opção, mantendo a independência dos votos.
As rotas para a entidade Poll são as seguintes:
- POST:
- Create Poll: http://localhost:3333/polls - Criar uma nova enquete de votação.
- Estrutura do body:
{ "title": "Best language?", "options": [ "HTML", "CSS", "JavaSCript" ] }
- Vote on Poll: http://localhost:3333/polls/{POLL_ID}/votes - Votar em uma das opções de enquete de uma enquete.
- Estrutura do body:
{ "pollOptionId": "871cae5d-6f89-46b8-ad95-3921d48e1773" }
- Create Poll: http://localhost:3333/polls - Criar uma nova enquete de votação.
- GET:
- Get Poll: http://localhost:3333/polls/{POLL_ID} - Retornar uma enquete.
- ws://localhost:3333/polls/{POLL_ID}/results - Cria uma conexão constante entre o cliente e o servidor para notificar o cliente quando o ranking de votos de uma enquete mudar.