https://github.com/nitoba/poll-voting
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
https://github.com/nitoba/poll-voting
api clean-architecture ddd-architecture golang websocket
Last synced: 11 months ago
JSON representation
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
- Host: GitHub
- URL: https://github.com/nitoba/poll-voting
- Owner: nitoba
- Created: 2024-02-10T19:03:33.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-22T02:35:30.000Z (over 2 years ago)
- Last Synced: 2025-03-02T01:29:32.737Z (over 1 year ago)
- Topics: api, clean-architecture, ddd-architecture, golang, websocket
- Language: Go
- Homepage:
- Size: 249 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 📊 Poll Voting
## 🚀 Introdução
Inspirado pela NLW Expect da [Rocketseat](https://rocketseat.com.br), onde um projeto semelhante foi desenvolvido na trilha de NodeJS.
Poll Voting é uma api construída em [Golang](https://golang.org/) para votações em enquetes.
A 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.
## 👨💻 Tecnologias
- [Golang](https://golang.org/): Linguagem de programação principal.
- [PostgreSQL](https://www.postgresql.org/): Banco de dados relacional para armazenar dados persistentes.
- [Redis](https://redis.io/): Armazenamento de cache para otimizar consultas frequentes.
- [Gin](https://gin-gonic.com/): Framework web para construir APIs em Golang.
- [Swagger](https://swagger.io/): Ferramenta para design, construção, documentação e uso de serviços web RESTful.
- [Prisma ORM](https://www.prisma.io/): ORM (Object-Relational Mapping) para comunicação com o banco de dados.
- [Docker](https://www.docker.com/): Ambiente de desenvolvimento para o PostgreSQL e Redis.
- [Autenticação JWT](https://jwt.io/): Autenticação baseada em JSON Web Tokens para garantir segurança nas chamadas da API.
## 🏗️ Padrões de Projeto
A aplicação segue os seguintes padrões de projeto:
1. **Clean Architecture**: A estrutura do projeto é organizada em camadas (entidades, use cases, interfaces) para separar as preocupações e facilitar a manutenção.
2. **Domain Driven Design (DDD)**: O design do software é orientado pelo domínio, com foco nas regras de negócio e nas entidades principais.
3. **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.
4. **Testes automatizados**: Os testes unitários, integração e end-2-end são escritos para garantir a qualidade do código.
## 🔄 Domain Events
Um 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.
## 🎯 Principais Funcionalidades
- [x] Possível se autenticar na aplicação. (registro e login)
- [x] Criar enquetes
- [x] Buscar enquentes
- [x] Votar em enquetes
- [x] Contagem de votos em tempo real
## 🔧 Rodando o projeto
Para rodar essa aplicação, você precisa ter o [Golang](https://golang.org/) e o [Docker](https://www.docker.com/) instalados em sua máquina.
- Rode o comando `make env` para criar o arquivo de variáveis de ambiente.
- Inicie os serviços de bancos de dados e cache utilizando o `docker-compose up -d`
- Rode o comando `go mod tidy` para baixar as dependências.
- Rode o comando `make prisma-deploy` para aplicar as migrations ao banco de dados.
- Rode o comando `make` para iniciar a aplicação.
- Acesse a documentação da API através do endereço `http://localhost:3333/docs/swagger/index.html`
## 🐳 Rodando via Docker
Rodando via Docker é uma forma mais simples de rodar a aplicação.
Não há necessidade de ter o Golang instalado em sua máquina.
- Rode o comando `make docker-run` para iniciar o container da aplicação.
- Acesse a documentação da API através do endereço `http://localhost:3333/docs/swagger/index.html`
## 🧪 Testes
- Rode o comando `make env-test` para criar o arquivo de variáveis de ambiente de tests.
- Para rodar os testes, execute o comando `make tests` no terminal.
## RoadMap
- [ ] Retornar as polls somente do votante logado
- [ ] Retornar o numero de votos de cada poll
- [ ] Fazer paginação de resultados
## 📄 Licença
Esse projeto está sob a licença MIT. Acesse o link [LICENSE](https://mit-license.org/) para mais detalhes.
## 🌐 GitHub
O código-fonte da aplicação pode ser encontrado no GitHub: [Link do Projeto](https://github.com/nitoba/poll-voting)
## 📧 Contato
Em 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).