- Aplicação construida em Node.js
- Para registro de enquetes (polls) em banco de dados PostgreSQL e Redis
- Utilizando WebSockets para comunicação em tempo real
-
Gere arquivo
package.json
:npm init -y
-
Instale Typescript e integração com Node:
npm i typescript @types/node -D
-
Crie
tsconfig.json
, instale o tsc:npx tsc --init
-
Configure
tsconfig.json
, conforme Node Target Mapping -
Crie estrutura
src > http > server.ts
-
Instale tsx que converte código
.ts
pra.js
, e executa código com node:npm i tsx -D
-
Crie em
package.json
o script"dev": "tsx watch src/http/server.ts"
🎯 Fastify
Cria serviços RESTFul
- Instale:
npm i fastify
- Trabalhe com cookie:
npm i @fastify/cookie
- Trabalhe com websocket:
npm i @fastify/websocket
🐳 Docker
Cria/gerencia imagens e containers
- Instale o docker
- Inicie (caso ainda não tenha os containers criados) todos os serviços definidos em docker-compose.yml no modo "detached" (em segundo plano):
docker compose up -d
ounpm run docker
- Liste containers:
docker ps
- Veja logs do container:
docker logs <container_id>
💾 Prisma
Cria/gerencia banco de dados
- Instale:
npm i prisma -D
- Configure:
npx prisma init
- Aplique a migração:
npx prisma migrate dev
- Abra studio:
npx prisma studio
Client para testar requests HTTP, WS, etc
- Configure: configuração > extensões > selecionar chrome > marcar checkbox "use a extensão..."
🎬 Zod
Realiza validações de dados
- Instale:
npm i zod
🔥 Redis
Banco de dados em memória (cache)
👜 Render
Para hospedagem da aplicação (node, postgres e redis)
- Instale:
- Instale as dependências:
npm i
- Configure seu Docker:
npm run docker
- Prepare seu Prisma local:
npm run prisma
- Execute o projeto:
- Local:
npm run dev
- Prod:
npm run start
- Local:
- Desfrute das APIs
-
Http:
- Local:
http://localhost:3333
- Prod:
https://polls-86ms.onrender.com
- Local:
-
WebSocket:
- Local:
ws://localhost:3333
- Prod:
wss://polls-86ms.onrender.com
- Local:
No seu Hoppscotch baixe e importe o arquivo polls_collection.json.
Retorna uma lista de enquetes.
- Tipo:
Rest > GET
- URL:
<URL>/polls
Retorna uma enquete.
- Tipo:
Rest > GET
- URL:
<URL>/polls/:pollId
Cadastra uma enquete.
- Tipo:
Rest > POST
- URL:
<URL>/polls
- Tipo de conteúdo:
application/json
- Payload:
{
"title": "Qual é o melhor framework Node.js?",
"options": ["Express", "Fastify", "NestJS", "HapiJS"]
}
Realiza um voto em uma enquete.
- Tipo:
Rest > POST
- URL:
<URL>/polls/:pollId/votes
- Tipo de conteúdo:
application/json
{
"pollOptionId": "81982dec-1375-4e1c-99dc-32147baf99b9"
}
Acompanha em tempo real os votos realizados em uma enquete (originados pela API Vote on poll).
- Tipo:
Tempo Real > WebSocket
- URL:
<URL>/polls/:pollId/results
Acompanha em tempo real as mensagens enviadas em uma sala de chat.
- Tipo:
Tempo Real > WebSocket
- URL:
<URL>/chat/:chatId