Skip to content

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

Notifications You must be signed in to change notification settings

nitoba/poll-voting

Repository files navigation

📊 Poll Voting

🚀 Introdução

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.

👨‍💻 Tecnologias

  • 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.

🏗️ 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

  • Possível se autenticar na aplicação. (registro e login)
  • Criar enquetes
  • Buscar enquentes
  • Votar em enquetes
  • Contagem de votos em tempo real

🔧 Rodando o projeto

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

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 para mais detalhes.

🌐 GitHub

O código-fonte da aplicação pode ser encontrado no GitHub: Link do Projeto

📧 Contato

Em caso de dúvidas ou sugestões, entre em contato através do e-mail: nito.ba.dev@gmail.com.

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages