{"id":23975682,"url":"https://github.com/atlas-jedi/node-polls","last_synced_at":"2026-04-10T07:07:46.467Z","repository":{"id":221617893,"uuid":"754811189","full_name":"atlas-jedi/node-polls","owner":"atlas-jedi","description":"Implementação back-end de um sistema de enquetes com atualização em tempo real de score.","archived":false,"fork":false,"pushed_at":"2024-02-25T21:58:08.000Z","size":25,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-07T06:50:13.412Z","etag":null,"topics":["cookie","docker-compose","fastify","fastify-webscoket","ioredis","node","postgresql","prisma","pub-sub-system","redis","typescript","websockets","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atlas-jedi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-08T20:08:16.000Z","updated_at":"2024-04-03T22:25:29.000Z","dependencies_parsed_at":"2024-02-09T02:28:03.978Z","dependency_job_id":"fed5b2da-aa9f-4a05-b9dd-3f1dec62a890","html_url":"https://github.com/atlas-jedi/node-polls","commit_stats":null,"previous_names":["atlas-jedi/node-polls"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlas-jedi%2Fnode-polls","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlas-jedi%2Fnode-polls/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlas-jedi%2Fnode-polls/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atlas-jedi%2Fnode-polls/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atlas-jedi","download_url":"https://codeload.github.com/atlas-jedi/node-polls/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240521052,"owners_count":19814694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cookie","docker-compose","fastify","fastify-webscoket","ioredis","node","postgresql","prisma","pub-sub-system","redis","typescript","websockets","zod"],"created_at":"2025-01-07T06:50:17.757Z","updated_at":"2026-04-10T07:07:46.455Z","avatar_url":"https://github.com/atlas-jedi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Node Polls\n\nNode Polls é um sistema backend, construído em Node.js, no qual realiza enquetes com atualização em tempo real do score de votação através de websockets.\n\n## Instalação\n\n1. Clone este repositório:\n\n```bash\n  git clone https://github.com/atlas-jedi/node-polls.git\n```\n\n2. Instale as dependências (Node v20.11.0):\n```bash\n  cd node-polls\n  npm install\n```\n\n3. Inicie os containers (Postgresql e Redis)\n```bash\n  docker compose up -d\n```\n\n4. Execute o servidor de desenvolvimento\n```bash\n  npm run dev\n```\n\n\n## Tecnologias Utilizadas\n\n- Node.js\n- Fastify\n- Prisma\n- Postgresql\n- Redis\n- WebSockets\n- Typescript\n\n\nO servidor HTTP é construído com Fastify, um framework web de alta eficiência por ser rápido e de baixo custo. O Prisma é usado como ORM para facilitar a interação com o banco de dados. O Redis foi utilizado para gerenciar o score de votação em conjunto de websockets para que a aplicação possua uma comunicação em tempo real das atualizações de votos de forma independente do banco de dados principal.\n## Documentação da API\n\n#### Retorna uma enquete específica com seus itens\n\n```\n  GET /polls/:pollId\n```\n\n| Parâmetro   | Tipo       | Descrição                           |\n| :---------- | :--------- | :---------------------------------- |\n| `pollId`    | `string`   | **Obrigatório**. ID da enquete a ser retornada |\n\n#### Cria uma enquete\n\n```\n  POST /polls\n```\n\n- Corpo da requisição (JSON):\n\n```json\n  {\n    \"title\": \"Nome da enquete\",\n    \"options\": [\"Opção 1\", \"Opção 2\", \"Opção 3\"]\n  }\n```\n\n#### Vota em um item específico em uma enquete específica\n\n```\n  POST /polls/:pollId\n```\n\n| Parâmetro   | Tipo       | Descrição                           |\n| :---------- | :--------- | :---------------------------------- |\n| `pollId`    | `string`   | **Obrigatório**. ID da enquete a ser votada |\n\n\n- Corpo da requisição (JSON):\n\n```json\n  {\n    \"pollOptionId\": \"ID do item a ser votado\"\n  }\n```\n\n### Canal de comunicação websocket\n- **URL:** `ws://localhost:3333/polls/:pollId/results`\n- **Protocolo**: WebSocket\n\n| Parâmetro   | Tipo       | Descrição                           |\n| :---------- | :--------- | :---------------------------------- |\n| `pollId`    | `string`   | **Obrigatório**. ID da enquete para ouvir as atualizações de score |\n\nEste endpoint fornece uma conexão WebSocket para comunicação em tempo real. A partir dessa conexão, o servidor irá enviar atualizações de score de votação especificado em tempo real.\n\n## Contribuindo\n\nContribuições são sempre bem-vindas! Sinta-se à vontade para abrir um pull request com melhorias ou correções.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatlas-jedi%2Fnode-polls","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatlas-jedi%2Fnode-polls","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatlas-jedi%2Fnode-polls/lists"}