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

https://github.com/pabloxt14/nlw-expert-polls

Um sistema de votação em tempo real em que os usuários podem criar uma enquete e outros usuários podem votar. O sistema gera uma classificação entre as opções e atualiza os votos em tempo real.
https://github.com/pabloxt14/nlw-expert-polls

fastify nodejs postgresql prisma redis typescript websocket zod

Last synced: 3 months ago
JSON representation

Um sistema de votação em tempo real em que os usuários podem criar uma enquete e outros usuários podem votar. O sistema gera uma classificação entre as opções e atualiza os votos em tempo real.

Awesome Lists containing this project

README

          


Logo NLW Expert
NLW Expert (Node.js)


GitHub language count

GitHub Top Language

Repository size


GitHub last commit


License


Stargazers


Capa do projeto


🚀 Aplicação finalizada 🚀


About |
Requisites |
Setup |
HTTP Routes |
Websocket Routes |
License

## 💻 About

Um sistema de votação em tempo real em que os usuários podem criar uma enquete e outros usuários podem votar. O sistema gera uma classificação entre as opções e atualiza os votos em tempo real.

Vale ressaltar que este projeto foi desenvolvido durante o evento **NLW** oferecido pela [Rocketseat](https://www.rocketseat.com.br/).

---

## 📝 Requisites

Antes de baixar o projeto você vai precisar ter instalado na sua máquina as seguintes ferramentas:

* [Git](https://git-scm.com)
* [NodeJS](https://nodejs.org/en/)
* [NPM](https://www.npmjs.com/) ou [Yarn](https://yarnpkg.com/)
* Para o banco de dados ter o [Docker](https://www.docker.com/) para baixar as imagens dos bancos PostgreSQL e Redis que utilizamos na aplicação.

Além disto é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/)

> Para mais detalhes das dependências gerais da aplicação veja o arquivo [package.json](./package.json)

---

## ⚙ Setup

Passo a passo para clonar e executar a aplicação na sua máquina:

```bash
# Clone este repositório
$ git clone git@github.com:pabloxt14/nlw-expert-polls.git

# Instale as dependências
$ npm install

# Configurar PostgreSQL e Redis
$ docker compose up -d

# Crie uma arquivo .env e preencha conforme apresentado no arquivo .env.example
$ cp .env.example .env

# Criar as migrations no banco com o Prisma
$ npx prisma migrate dev

# Execute a aplicação em modo de desenvolvimento
$ npm run dev
```

Teste! (Eu pessoalmente recomendo testar a aplicação com o [Hoppscotch](https://hoppscotch.io/)).

---

## HTTP Routes

### POST `/polls`

Cria uma nova enquete.

#### Request body

```json
{
"title": "Qual a melhor linguagem de programação?",
"options": [
"JavaScript",
"Java",
"PHP",
"C#"
]
}
```

#### Response body

```json
{
"pollId": "194cef63-2ccf-46a3-aad1-aa94b2bc89b0"
}
```

### GET `/polls/:pollId`

Retorna os dados de uma única enquete.

#### Response body

```json
{
"poll": {
"id": "e4365599-0205-4429-9808-ea1f94062a5f",
"title": "Qual a melhor linguagem de programação?",
"options": [
{
"id": "4af3fca1-91dc-4c2d-b6aa-897ad5042c84",
"title": "JavaScript",
"score": 1
},
{
"id": "780b8e25-a40e-4301-ab32-77ebf8c79da8",
"title": "Java",
"score": 0
},
{
"id": "539fa272-152b-478f-9f53-8472cddb7491",
"title": "PHP",
"score": 0
},
{
"id": "ca1d4af3-347a-4d77-b08b-528b181fe80e",
"title": "C#",
"score": 0
}
]
}
}
```

### POST `/polls/:pollId/votes`

Adiciona um voto a uma enquete específica.

#### Request body

```json
{
"pollOptionId": "31cca9dc-15da-44d4-ad7f-12b86610fe98"
}
```

#### Response body

```json
{
"message": "Votado com sucesso!"
}
```

---

## WebSocket Routes

### ws `/polls/:pollId/results`

#### Message

```json
{
"pollOptionId": "da9601cc-0b58-4395-8865-113cbdc42089",
"votes": 2
}
```

---

## 📝 License

Este projeto está sob a licença MIT. Consulte o arquivo [LICENSE](./LICENSE) para mais informações

---


Feito com 💜 por Pablo Alan 👋🏽 Entre em contato!