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, utilizando habilidades do desenvolvimento backend aprendidas utilizando NodeJS.
- Golang: Linguagem de programação principal.
- PostgreSQL: Banco de dados relacional para armazenar dados persistentes.
- Redis: Armazenamento de cache para otimizar consultas frequentes.
- Gin: Framework web para construir APIs em Golang.
- Swagger: Ferramenta para design, construção, documentação e uso de serviços web RESTful.
- Prisma ORM: ORM (Object-Relational Mapping) para comunicação com o banco de dados.
- Docker: Ambiente de desenvolvimento para o PostgreSQL e Redis.
- Autenticação JWT: Autenticação baseada em JSON Web Tokens para garantir segurança nas chamadas da API.
A aplicação segue os seguintes padrões de projeto:
-
Clean Architecture: A estrutura do projeto é organizada em camadas (entidades, use cases, interfaces) para separar as preocupações e facilitar a manutenção.
-
Domain Driven Design (DDD): O design do software é orientado pelo domínio, com foco nas regras de negócio e nas entidades principais.
-
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.
-
Testes automatizados: Os testes unitários, integração e end-2-end são escritos para garantir a qualidade do código.
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.
- Possível se autenticar na aplicação. (registro e login)
- Criar enquetes
- Buscar enquentes
- Votar em enquetes
- Contagem de votos em tempo real
Para rodar essa aplicação, você precisa ter o Golang e o Docker 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 é 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
- 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.
- Retornar as polls somente do votante logado
- Retornar o numero de votos de cada poll
- Fazer paginação de resultados
Esse projeto está sob a licença MIT. Acesse o link LICENSE para mais detalhes.
O código-fonte da aplicação pode ser encontrado no GitHub: Link do Projeto
Em caso de dúvidas ou sugestões, entre em contato através do e-mail: nito.ba.dev@gmail.com.