https://github.com/atlas-jedi/node-polls
Implementação back-end de um sistema de enquetes com atualização em tempo real de score.
https://github.com/atlas-jedi/node-polls
cookie docker-compose fastify fastify-webscoket ioredis node postgresql prisma pub-sub-system redis typescript websockets zod
Last synced: 8 months ago
JSON representation
Implementação back-end de um sistema de enquetes com atualização em tempo real de score.
- Host: GitHub
- URL: https://github.com/atlas-jedi/node-polls
- Owner: atlas-jedi
- Created: 2024-02-08T20:08:16.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-02-25T21:58:08.000Z (over 1 year ago)
- Last Synced: 2025-01-07T06:50:13.412Z (10 months ago)
- Topics: cookie, docker-compose, fastify, fastify-webscoket, ioredis, node, postgresql, prisma, pub-sub-system, redis, typescript, websockets, zod
- Language: TypeScript
- Homepage:
- Size: 24.4 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Node Polls
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.
## Instalação
1. Clone este repositório:
```bash
git clone https://github.com/atlas-jedi/node-polls.git
```
2. Instale as dependências (Node v20.11.0):
```bash
cd node-polls
npm install
```
3. Inicie os containers (Postgresql e Redis)
```bash
docker compose up -d
```
4. Execute o servidor de desenvolvimento
```bash
npm run dev
```
## Tecnologias Utilizadas
- 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.
## Documentação da API
#### Retorna uma enquete específica com seus itens
```http
GET /polls/:pollId
```
| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :---------------------------------- |
| `pollId` | `string` | **Obrigatório**. ID da enquete a ser retornada |
#### Cria uma enquete
```http
POST /polls
```
- Corpo da requisição (JSON):
```json
{
"title": "Nome da enquete",
"options": ["Opção 1", "Opção 2", "Opção 3"]
}
```
#### Vota em um item específico em uma enquete específica
```http
POST /polls/:pollId
```
| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :---------------------------------- |
| `pollId` | `string` | **Obrigatório**. ID da enquete a ser votada |
- Corpo da requisição (JSON):
```json
{
"pollOptionId": "ID do item a ser votado"
}
```
### Canal de comunicação websocket
- **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.
## Contribuindo
Contribuições são sempre bem-vindas! Sinta-se à vontade para abrir um pull request com melhorias ou correções.