{"id":23449599,"url":"https://github.com/gnobroga/vota-agora-backend","last_synced_at":"2026-04-20T03:02:05.153Z","repository":{"id":264551193,"uuid":"864345201","full_name":"GNobroga/vota-agora-backend","owner":"GNobroga","description":"Vota Agora é uma aplicação backend simples que será integrada a um frontend em React, desenvolvida como parte do trabalho da disciplina de Redes de Computadores.","archived":false,"fork":false,"pushed_at":"2024-11-30T16:39:44.000Z","size":827,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-10T05:57:15.451Z","etag":null,"topics":["blockchain","jwt","nestjs","smart-contracts","solidity","sqlite","typeorm"],"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/GNobroga.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,"publiccode":null,"codemeta":null}},"created_at":"2024-09-28T01:46:49.000Z","updated_at":"2024-11-30T16:39:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"52b60f6a-fdd0-4753-b6be-2b3cde5bec2a","html_url":"https://github.com/GNobroga/vota-agora-backend","commit_stats":null,"previous_names":["gnobroga/vota-agora-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GNobroga/vota-agora-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GNobroga%2Fvota-agora-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GNobroga%2Fvota-agora-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GNobroga%2Fvota-agora-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GNobroga%2Fvota-agora-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GNobroga","download_url":"https://codeload.github.com/GNobroga/vota-agora-backend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GNobroga%2Fvota-agora-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32031070,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["blockchain","jwt","nestjs","smart-contracts","solidity","sqlite","typeorm"],"created_at":"2024-12-23T23:28:06.227Z","updated_at":"2026-04-20T03:02:05.112Z","avatar_url":"https://github.com/GNobroga.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vota Agora - (Em construção)\n\nLink para o frontend \u003ca href=\"https://github.com/4L1C3-R4BB1T/vota-agora-frontend\"\u003eFrontend\u003c/a\u003e\n\n![](docs/usecases.jpg)\n\n\n## Objetivo da Aplicação:\n\nO objetivo desta aplicação é desenvolver um sistema que utilize a blockchain para garantir a integridade e a consistência de uma votação em uma consulta pública realizada por um usuário. Consultas públicas são entidades que representam ideias que serão debatidas por um determinado indivíduo.\n\nO fluxo da aplicação funcionará da seguinte forma: ao se cadastrar, o usuário receberá 1000 **ETH** (pois existe um custo associado a cada votação que ele realizará). Ao participar de uma votação, o usuário receberá 10 **GLT**, um token criado pela nossa aplicação que representará algum tipo de recompensa.\n\n\n## 🔗 API Endpoints\n\n### Autenticação\n\n🟡 **```POST```** :: Permite o usuário se autenticar.\n\n```\n/api/v1/auth\n```\n\n```json\n{\n   \"document\": \"YOUR_DOCUMENT\", // CPF\n   \"password\": \"YOUR_PASSWORD\"\n}\n```\n\n```json\n{\n    \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NmY5M2Q1MWJkNDBmMDgzZTljOTlhY2QiLCJkb2N1bWVudCI6IjE3MzY0NTA5NzIwIiwid2FsbGV0QWRkcmVzcyI6IjB4MEFGNjY3Y0VjMDlEQzU2OEJkM0Y1YkI2YzY3MjBGNDc5NjZiOWY1NyIsInJvbGUiOiJST0xFX1VTRVIiLCJpYXQiOjE3Mjc2MTA1ODQsImV4cCI6MTcyNzY5Njk4NH0.4tP7zwtlZb6P9Dg_CXIOf21Zz97YM_Na-pv_hrXQYHY\"\n}\n```\n\n- O token deverá ser colocado no cabeçalho **Authorization** da requisição com o prefixo **Bearer [Token]**\n\n### Usuários\n\n🟢 **```GET```** :: Permite obter os usuários \n\n```\n/api/v1/users\n```\n\n\n- **```page```:** numéro da página (começa em zero)\n- **```size```:** quantidade de itens por página\n- Apenas usuários com **ROLE_ADMIN** podem ter acesso.\n\n\n```json\n[\n   {\n        \"id\": 1,\n        \"fullName\": \"Gabriel\",\n        \"document\": \"17364509720\",\n        \"accountAddress\": \"0x6F81D1c8f35d02b299cb8d79b55fE51880D24D84\",\n        \"privateKey\": \"0x295c5ee5d7ab2493ac34f6f99dbf930501fa3fe1d7a2f70f7ba5f71fadb6396e\",\n        \"rewardTokenAddress\": \"0x151339846E9C95dD85dE1Fb12df8De5578A2Ae50\"\n    }\n]\n```\n\n- **RewardToken** é a quantidade tokens que o usuário adquiriu votando nas consultas públicas. \n\n\n\n🟡 **```POST```** ::  Permite criar um usuário\n\n```\n/api/v1/users\n```\n\n```json\n{\n    \"fullName\": \"Gabriel Cardoso\",\n    \"document\": \"YOUR_DOCUMENT\",\n    \"password\": \"YOUR_PASSWORD\",\n    \"confirmationPassword\": \"YOUR_PASSWORD\",\n}\n```\n\n- Caso o **Document** já exista, não será possível utilizar.\n\n\n```json\n{\n    \"id\": 1,\n    \"fullName\": \"Gabriel\",\n    \"document\": \"17364509720\",\n    \"accountAddress\": \"0x6F81D1c8f35d02b299cb8d79b55fE51880D24D84\",\n    \"privateKey\": \"0x295c5ee5d7ab2493ac34f6f99dbf930501fa3fe1d7a2f70f7ba5f71fadb6396e\",\n    \"rewardTokenAddress\": \"0x151339846E9C95dD85dE1Fb12df8De5578A2Ae50\"\n}\n```\n\n- **privateKey** - Permite o usuário importa sua conta. (Exemplo: no Metamask)\n- **tokenAddress** - Permite o usuário importa o Reward Token. (Exemplo: no Metamask)\n- O **Usuário** ao criar a conta ganhará **1000 Ether**.\n\n\n### Consulta Pública\n\n🟢 **```GET```** :: Obter todas as consultas\n\n- **```page```:** numéro da página (começa em zero)\n- **```size```:** quantidade de itens por página\n\n\n```json\n[\n  {\n    \"id\": 1,\n    \"title\": \"Title3\",\n    \"ownerName\": \"Gabriel\",\n    \"description\": \"Descirption\",\n    \"endDate\": \"2024-09-30T15:42:00.000Z\",\n    \"initialDate\": \"2024-09-30T13:47:00.000Z\",\n    \"imageUrl\": null,\n    \"category\": \"Alimentícia\",\n    \"status\": \"open\",\n    \"owner\": true\n  },\n   {\n    \"id\": 2,\n    \"title\": \"Title3\",\n    \"ownerName\": \"Miguel\",\n    \"description\": \"Descirption\",\n    \"endDate\": \"2024-09-30T15:42:00.000Z\",\n    \"initialDate\": \"2024-09-30T13:47:00.000Z\",\n    \"imageUrl\": null,\n    \"category\": \"Alimentícia\",\n    \"status\": \"open\",\n    \"voted\": false\n  },\n   {\n    \"id\": 3,\n    \"title\": \"Title3\",\n    \"ownerName\": \"Lívia\",\n    \"description\": \"Descirption\",\n    \"endDate\": \"2024-09-30T15:42:00.000Z\",\n    \"initialDate\": \"2024-09-30T13:47:00.000Z\",\n    \"imageUrl\": null,\n    \"category\": \"Alimentícia\",\n    \"status\": \"open\",\n    \"voted\": true\n  }\n]\n```\n\n- Na listagem, caso o usuário logado seja o dono irá exibir o campo **owner** como **true**.\n- Caso o usuário logado não seja o dono, vai exibir normalmente o campo **voted**.\n\n🟡 **```POST```** ::  Permite criar uma Consulta Pública\n\n```\n/api/v1/public-consultation\n```\n\n```json\n{\n  \"title\": \"Title3\",\n  \"description\": \"Descirption\",\n  \"initialDate\": \"2024-09-30T10:40:00\",\n  \"endDate\": \"2024-09-30T12:42:00\",\n  \"category\": \"Alimentícia\"\n}\n```\n\n- O usuário logado terá sua identificação associada a consulta automaticamente.\n- A data inicial não pode ser menor que a data de hoje.\n- A data inicial não pode ser maior que a data final.\n- A Consulta Pública terá o status **open** ao ser criada.\n- Quando o **endDate** for menor que a a data atual automaticamente a consulta mudará seu status para **closed**. \n\n## Tecnologias\n\n- Web3\n- Blockchain\n- Smart Contract\n- NestJS\n- MongoDB\n- Docker\n- Autenticação JWT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnobroga%2Fvota-agora-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnobroga%2Fvota-agora-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnobroga%2Fvota-agora-backend/lists"}