Skip to content

Mateus402/votacao-enquete-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Node

Iniciando o projeto Node do zero

  • 1 - Criando o arquivo package.json
npm init -y
  • 2 - Instalando o TypeScript e vinculando ele com o Node
npm install typescript @types/node -D
  • 3 - Criando o arquivo de configuração do TypeScript
npx tsc --init
  • 4 - Configurar o TypeScript com o Target Mapping, um repositório da Microsoft.

    • 4.1 - Verifique qual versão do Node você está utilizando e localize-a no repositório:
    • 4.2 - No arquivo tsconfig.json altere as informações conforme o repositório
  • 5 - Criar as pasta e arquivo src http server.ts respectivamente. O server.ts é onde vai rodar a API.

  • 6 - Como o Node não roda nativamente o TypeScript, é necessário utilizar uma biblioteca que converte o TypeScript para JavaScript. Nesse caso, utilizei a TSX.

npm install tsx -D
  • 7 - No arquivo package.json criar um script para executar o TSX
"scripts": {
    "dev": "tsx watch src/http/server.ts"
  }
  • 8 - Para executar o servidor, basta executar o comando
npm run dev
  • 9 - Criando o servidor Node com o Fastify. Para instalar o Fastify, basta executar o comando
npm i fastify
  • 10 - No arquivo server.ts você incializa o fastify
import fastify from 'fastify'

const app = fastify()

app.listen({ port: 3333}).then(() =>{
    console.log('HTTP Server running')
})



Configurando o Docker

Com o docker instalado, basta criar o arquivo docker-compose.yml e inserir as informações de configuração

version: '3.7'

services:
  postgres:
    image: bitnami/postgresql:latest
    ports:
      - '5432:5432'
    environment:
      - POSTGRES_USER=docker
      - POSTGRES_PASSWORD=docker
      - POSTGRES_DB=polls
    volumes:
      - polls_pg_data:/bitnami/postgresql

  redis:
    image: bitnami/redis:latest
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - '6379:6379'
    volumes:
      - 'polls_redis_data:/bitnami/redis/data'

volumes:
  polls_pg_data:
  polls_redis_data:
  • Para rodar o docker é só executar o comando
docker compose up -d


Prisma ORM

Para instalar o Prima você precisa executar o seguinte comando

npm install -D prisma

Para iniciar o Prisma

npx prisma init

Com esse comando o arquivo .env será criado

Agora é necessário configurar o arquivo .env conforme as informações passadas no arquivo docker-compose.yml

Para gerar as tabelas inseridas no arquivo schema.prisma é necessário executar o comando

npx prisma migrate dev

O Prisma tem uma inferface integrada

npx prisma studio


Rotas

Para Inserir uma nova enquete use a rota POST:

http://localhost:3333/polls

É nescessário incluir os paramêtros obrigatórios TITLE e OPTIONS: EX:

{
    "title" : "Qual o melhor Framework Node.JS?",
    "options": ["Express", "Fastify", "NestJS", "HapiJS"]
}

Para buscar uma enquete pelo ID use a rota GET:

http://localhost:3333/polls/:id

Para incluir um voto, sendo ele unico para uma opção de cada enquete, utilize a rota POST:

http://localhost:3333/polls/:id/votes

A API verifica se esse usuário já votou anteriormente pelo Cookie, caso não tenha feito um voto, será incluso um novo, caso já tenha votado e seja a mesma opção do voto anterior, retorna Status 400, ou, se ele votar em uma nova opção, o voto anterior será excluído e esse novo será incluido.

É necessário passar como paramêtro o ID da enquete que está votando EX:

{
    "pollOptionId": "e1c36ac2-eee8-412b-a2d8-b91fb723a764"
}

Rota WebScoket RealTime:

ws://localhost:3333/polls/2713d13e-b52c-47e6-ba92-c44705cdf02a/results

About

API Node de enquete de votação em tempo real

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published