/PollProject

Projeto de enquete em tempo real feito com node.js - Feito na NLW

Primary LanguageTypeScript

Sobre o Projeto

Este é um projeto de sistema de enquete desenvolvido em Node.js utilizando TypeScript, Docker, Prisma, Redis e Fastify.

O sistema permite que os usuários criem enquetes, votem nelas e visualizem os resultados em tempo real. Ele utiliza WebSocket para atualizações em tempo real e armazenamento em cache com Redis para uma melhor performance.


Pré-requisitos

  • Node
  • Docker

Se você não tiver o Node (Recomendável versão LTS)

Se você não tiver o Docker (Escolha a versão conforme seu sistema operacional)

Instalação

Para executar o projeto localmente, siga estas etapas no terminal:

1 - Clone esse repositório em sua máquina local:

git clone https://github.com/CaioCesarMDS/PollProject.git

2 - Navegue até o diretório do projeto:

cd Polls

3 - Instale as dependências do projeto:

npm install

Execução

Para testar o projeto, siga esses passos:

1 - Inicie os contêineres Docker usando o Docker Compose:

docker-compose up -d

2 - Inicie o servidor:

npm run dev

3 - Utilize algum aplicativo/ferramenta de testes em APIs como o Postman ou Thunder Client, do Vscode:

  • 3.1 - Testando a criação de enquetes:

  • Utilizando o método POST, coloque "http://localhost:3333/polls" no campo de URL da sua ferramenta de teste. No body da requisição, coloque um objeto com um título da enquete e as opções dela, abaixo um exemplo.

    {
      "title": "Qual é a melhor IDE?",
      "options": ["VScode", "Spider", "JetBrains", "SublimeText"]
    }
    
  • 3.2 - Visualizando informações da enquete:

  • Utilizando o método GET, coloque "http://localhost:3333/polls/pollId" no campo de URL da sua ferramenta de teste. O pollId deve ser criado no passo anterior.

  • 3.1 - Testando a votação na enquete:

  • Utilizando o método POST, coloque "http://localhost:3333/polls/pollId/votes" no campo de URL da sua ferramenta de teste. No body da requisição, coloque um objeto com o pollOptionId. O pollOptionId deve ser pego com o passo anterior

  • 3.1 - Visualizando o resultado da enquete:

  • Utilizando o request WebSocket, coloque "ws://localhost:3333/polls/pollId/results" no campo de URL da sua ferramenta de teste.


Funcionalidades

1 - Criar enquetes;

2 - Votar em enquetes;

3 - Visualizar resultado em tempo real;


Tecnologias

Essas foram as principais tecnologias utilizadas no projeto:


  • Node: plataforma de código aberto que executa JavaScript do lado do servidor, permitindo a construção de aplicativos web escaláveis e de alto desempenho.

  • Docker: plataforma que facilita a criação, implantação e execução de aplicativos em contêineres, permitindo que os aplicativos sejam executados de forma consistente em diferentes ambientes.

  • TypeScript: linguagem de programação que estende o JavaScript adicionando tipagem estática opcional, permitindo o desenvolvimento de código mais seguro e com menos erros.

  • Prisma: ORM (Object-Relational Mapping) moderno e poderoso para Node.js e TypeScript, que simplifica o acesso ao banco de dados e oferece uma API de banco de dados mais segura e expressiva.

  • Redis: banco de dados em memória de chave-valor de código aberto, que é usado neste projeto para armazenamento em cache e gerenciamento de filas, proporcionando um desempenho rápido e escalabilidade.

  • Fastify: estrutura web rápida e eficiente para Node.js, que é usada para lidar com solicitações HTTP no servidor, fornecendo baixa latência e alto desempenho.

  • WebSocket: protocolo de comunicação bidirecional em tempo real, que é usado neste projeto para comunicação assíncrona em tempo real entre o servidor e os clientes, permitindo atualizações em tempo real dos resultados da enquete.


Autor

Esse Projeto foi desenvolvido por Caio Cesar 🔥