Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lucaspanizio/nlw-expert-polls
API com a qual é possível criar, consultar e votar em enquetes com múltiplas alternativas, utilizando rotas HTTP e WebSocket. Este projeto foi desenvolvido na trilha React durante o evento Next Level Week Expert da RocketSeat, em fevereiro de 2024.
https://github.com/lucaspanizio/nlw-expert-polls
Last synced: about 1 month ago
JSON representation
API com a qual é possível criar, consultar e votar em enquetes com múltiplas alternativas, utilizando rotas HTTP e WebSocket. Este projeto foi desenvolvido na trilha React durante o evento Next Level Week Expert da RocketSeat, em fevereiro de 2024.
- Host: GitHub
- URL: https://github.com/lucaspanizio/nlw-expert-polls
- Owner: lucaspanizio
- License: mit
- Created: 2024-02-12T19:03:31.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-02-16T01:19:00.000Z (about 1 year ago)
- Last Synced: 2024-11-11T19:03:59.933Z (3 months ago)
- Language: TypeScript
- Homepage:
- Size: 29.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
Expert Polls
API capaz de criar, consultar e votar em enquetes com múltiplas alternativas, utilizando rotas HTTP e WebSocket. Este projeto foi desenvolvido na trilha Node.js durante a 14ª edição do evento Next Level Week Expert da RocketSeat, em fevereiro de 2024.
🚀 Tecnologias |
☝ Pré-Requisitos |
⚡ Como Executar |
📝 Documentação |
📜 Licença
![]()
## 🚀 Tecnologias
## ☝ Pré-Requisitos
É necessário ter Node.js e Docker instalados previamente.
## ⚡ Como executar
Clone este repositório
```bash
git clone https://github.com/lucaspanizio/nlw-expert-polls.git
```Acesse o diretório da aplicação
```bash
cd nlw-expert-polls
```Instale as dependências
```bash
npm install
```Suba os containers Docker do PostgreeSQL e Redis
```bash
docker compose up -d
```Execute as migrações do Prisma para criar as tabelas do BD
```bash
npx prisma migrate dev
```Execute a aplicação
```bash
npm run dev
```Faça requisições para as rotas mapeadas da API, conforme documentação abaixo, por meio de uma plataforma como Postman ou Hoppscotch.
## 📝 Documentação
## Rotas HTTP
baseURL:
localhost:3333
POST
http://{baseURL}/polls
Cria uma nova enquete.#### Request body
```json
{
"title": "Qual é o melhor framework Node.JS ?",
"options": ["Express", "Fastify", "NestJS", "HapiJS"]
}
```#### Response body
```json
{
"pollId": "16c73779-d463-43de-b832-4b4b10fc2b63"
}
```
POST
http://{baseURL}/polls/:pollId/votes
Vota em uma opção de uma enquete.
Obs.: Ao votar em outra opção de uma mesma enquete já votada anteriormente, o voto original será substituído pelo novo.#### Request body
```json
{
"pollOptionId": "2db536d6-2ffd-464d-b91b-1ee4c9e59d64"
}
```#### Response body
```json
{
"message": "Voto realizado com sucesso."
}
```
GET
http://{baseURL}/polls/:pollId
Retorna dados de uma única enquete.#### Response body
```json
{
"poll": {
"id": "16c73779-d463-43de-b832-4b4b10fc2b63",
"title": "Qual é o melhor framework Node.JS ?",
"options": [
{
"id": "530b2c40-e197-44a7-80a3-7653f6753f3a",
"title": "Express",
"score": 0
},
{
"id": "2db536d6-2ffd-464d-b91b-1ee4c9e59d64",
"title": "Fastify",
"score": 1
},
{
"id": "ae6f6ee1-5a4e-44b7-a0e3-dee88e8c7485",
"title": "NestJS",
"score": 0
},
{
"id": "8a8af74c-2844-4d6a-8c82-9fdede545773",
"title": "HapiJS",
"score": 0
}
]
}
}
```
## Rotas WebSockets
ws://localhost:3333/polls/:pollId/results
Recebe essa mensagem a cada voto feito.
Obs.: Se usuário já havia votado nessa enquete, recebe também uma mensagem relativa a ID da opção antiga, e com o novo valor decrementado.#### Message
```json
{
"pollOptionId": "2db536d6-2ffd-464d-b91b-1ee4c9e59d64",
"votes": 1
}
```
## 📜 Licença
Esse projeto está sob a licença MIT.
![]()
#### Desenvolvido por José Lucas Panizio 🖖
[](https://www.linkedin.com/in/lucaspanizio/)
[](mailto:[email protected])