Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: 18 days ago
JSON representation

Implementação back-end de um sistema de enquetes com atualização em tempo real de score.

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.