Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/atlas-jedi/node-polls
- Owner: atlas-jedi
- Created: 2024-02-08T20:08:16.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-02-25T21:58:08.000Z (11 months ago)
- Last Synced: 2024-02-25T22:40:56.303Z (11 months ago)
- Topics: cookie, docker-compose, fastify, fastify-webscoket, ioredis, node, postgresql, prisma, pub-sub-system, redis, typescript, websockets, zod
- Language: TypeScript
- Homepage:
- Size: 21.5 KB
- Stars: 1
- Watchers: 1
- 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
- TypescriptO 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.