{"id":24157796,"url":"https://github.com/nitoba/poll-voting","last_synced_at":"2025-07-13T21:08:35.807Z","repository":{"id":221887243,"uuid":"755625460","full_name":"nitoba/poll-voting","owner":"nitoba","description":"Inspirado pela NLW Expect da Rocketseat, onde um projeto semelhante foi desenvolvido na trilha de NodeJS. Poll Voting é uma api construída em Golang para votações em enquetes. A intenção deste projeto é demonstrar a utilização de ferramentas e técnicas de desenvolvimento web em Golang ","archived":false,"fork":false,"pushed_at":"2024-02-22T02:35:30.000Z","size":255,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T01:29:32.737Z","etag":null,"topics":["api","clean-architecture","ddd-architecture","golang","websocket"],"latest_commit_sha":null,"homepage":"","language":"Go","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/nitoba.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-02-10T19:03:33.000Z","updated_at":"2024-03-12T20:27:39.000Z","dependencies_parsed_at":"2024-06-21T07:31:55.297Z","dependency_job_id":"155db6e8-906d-4a29-9080-631d3c4a7ad2","html_url":"https://github.com/nitoba/poll-voting","commit_stats":null,"previous_names":["nitoba/poll-voting"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nitoba/poll-voting","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitoba%2Fpoll-voting","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitoba%2Fpoll-voting/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitoba%2Fpoll-voting/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitoba%2Fpoll-voting/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nitoba","download_url":"https://codeload.github.com/nitoba/poll-voting/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nitoba%2Fpoll-voting/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265205775,"owners_count":23727511,"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":["api","clean-architecture","ddd-architecture","golang","websocket"],"created_at":"2025-01-12T14:17:57.124Z","updated_at":"2025-07-13T21:08:35.783Z","avatar_url":"https://github.com/nitoba.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📊 Poll Voting\n\n## 🚀 Introdução\n\nInspirado pela NLW Expect da [Rocketseat](https://rocketseat.com.br), onde um projeto semelhante foi desenvolvido na trilha de NodeJS.\nPoll Voting é uma api construída em [Golang](https://golang.org/) para votações em enquetes.\nA intenção deste projeto é demonstrar a utilização de ferramentas e técnicas de desenvolvimento web em Golang, utilizando habilidades do desenvolvimento backend aprendidas utilizando NodeJS.\n\n## 👨‍💻 Tecnologias\n\n- [Golang](https://golang.org/): Linguagem de programação principal.\n- [PostgreSQL](https://www.postgresql.org/): Banco de dados relacional para armazenar dados persistentes.\n- [Redis](https://redis.io/): Armazenamento de cache para otimizar consultas frequentes.\n- [Gin](https://gin-gonic.com/): Framework web para construir APIs em Golang.\n- [Swagger](https://swagger.io/): Ferramenta para design, construção, documentação e uso de serviços web RESTful.\n- [Prisma ORM](https://www.prisma.io/): ORM (Object-Relational Mapping) para comunicação com o banco de dados.\n- [Docker](https://www.docker.com/): Ambiente de desenvolvimento para o PostgreSQL e Redis.\n- [Autenticação JWT](https://jwt.io/): Autenticação baseada em JSON Web Tokens para garantir segurança nas chamadas da API.\n\n## 🏗️ Padrões de Projeto\n\nA aplicação segue os seguintes padrões de projeto:\n\n1. **Clean Architecture**: A estrutura do projeto é organizada em camadas (entidades, use cases, interfaces) para separar as preocupações e facilitar a manutenção.\n\n2. **Domain Driven Design (DDD)**: O design do software é orientado pelo domínio, com foco nas regras de negócio e nas entidades principais.\n\n3. **Injeção de Dependência**: A inversão de controle e injeção de dependência são utilizadas para garantir a flexibilidade e testabilidade do código.\n\n4. **Testes automatizados**: Os testes unitários, integração e end-2-end são escritos para garantir a qualidade do código.\n\n## 🔄 Domain Events\n\nUm dos diferenciais dessa aplicação é a utilização do conceito de **Domain Events** para atualizar a contagem de votos quando um novo voto é registrado ou alterado. Isso garante que a lógica de negócio relacionada à contagem de votos permaneça consistente.\n\n## 🎯 Principais Funcionalidades\n\n- [x] Possível se autenticar na aplicação. (registro e login)\n- [x] Criar enquetes\n- [x] Buscar enquentes\n- [x] Votar em enquetes\n- [x] Contagem de votos em tempo real\n\n## 🔧 Rodando o projeto\n\nPara rodar essa aplicação, você precisa ter o [Golang](https://golang.org/) e o [Docker](https://www.docker.com/) instalados em sua máquina.\n\n- Rode o comando `make env` para criar o arquivo de variáveis de ambiente.\n- Inicie os serviços de bancos de dados e cache utilizando o `docker-compose up -d`\n- Rode o comando `go mod tidy` para baixar as dependências.\n- Rode o comando `make prisma-deploy` para aplicar as migrations ao banco de dados.\n- Rode o comando `make` para iniciar a aplicação.\n- Acesse a documentação da API através do endereço `http://localhost:3333/docs/swagger/index.html`\n\n## 🐳 Rodando via Docker\n\nRodando via Docker é uma forma mais simples de rodar a aplicação.\nNão há necessidade de ter o Golang instalado em sua máquina.\n\n- Rode o comando `make docker-run` para iniciar o container da aplicação.\n- Acesse a documentação da API através do endereço `http://localhost:3333/docs/swagger/index.html`\n\n## 🧪 Testes\n\n- Rode o comando `make env-test` para criar o arquivo de variáveis de ambiente de tests.\n- Para rodar os testes, execute o comando `make tests` no terminal.\n\n## RoadMap\n\n- [ ] Retornar as polls somente do votante logado\n- [ ] Retornar o numero de votos de cada poll\n- [ ] Fazer paginação de resultados \n\n## 📄 Licença\n\nEsse projeto está sob a licença MIT. Acesse o link [LICENSE](https://mit-license.org/) para mais detalhes.\n\n## 🌐 GitHub\n\nO código-fonte da aplicação pode ser encontrado no GitHub: [Link do Projeto](https://github.com/nitoba/poll-voting)\n\n## 📧 Contato\n\nEm caso de dúvidas ou sugestões, entre em contato através do e-mail: [nito.ba.dev@gmail.com](mailto:nito.ba.dev@gmail.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitoba%2Fpoll-voting","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnitoba%2Fpoll-voting","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitoba%2Fpoll-voting/lists"}