GithubHelp home page GithubHelp logo

votes-challenge's Introduction

🚀 Votes Challenge 📚

Este projeto trata-se de um desafio da South System, ele consiste basicamente em uma API REST para realizar alguns fluxos de cadastro e votação de Pautas em uma Sessão. As tecnologias usadas para isso foram Java, Spring Boot, Kafka, Flyway, Postgres e Swagger.

GitHub stars Maven Central with version prefix filter

🤔 O que é este projeto?

Esse projeto foi desenvolvido baseando-se no contexto de cooperativismo, onde cada associado possui um voto e as decisões são tomadas em assembleias, por meio de votações. A proposta da API aqui desenvolvida era solucionar o gerenciamento dessas sessões de votação.

📑 To-do do Projeto

  • Cadastrar uma nova pauta;
  • Abrir uma sessão de votação em uma pauta (a sessão de votação deve ficar aberta por um tempo determinado na chamada de abertura ou 1 minuto por default);
  • Receber votos dos associados em pautas (os votos são apenas 'Sim'/'Não'. Cada associado é identificado por um id único e pode votar apenas uma vez por pauta);
  • Contabilizar os votos e dar o resultado da votação na pauta.

Durante o processo de desenvolvimento foram feitas algumas anotações no Notion, no link abaixo você pode ver algumas abstrações, solução técnica e alguns diagramas de classe e ER.

🚀 Executando a aplicação 👾

📍 Local

Se você quiser fazer alguma modificação no código precisará ter instalado em sua máquina as seguintes ferramentas:

🐳 Docker

Este projeto conta com um docker-compose, inclusive a própria imagem da aplicação já está configurada para ser executada no docker.

Os requisitos para isso são:

  • Docker - Baixe de acordo com o seu SO
  • Docker-compose - Se estiver utilizando Windows, o Docker desktop já possui o docker-compose instalado

A imagem da aplicação também está disponível no Docker Hub:

Caso queria executa-lá através dessa imagem, abaixo tem alguns comandos que podem lhe ajudar:

⬇ 1. Pull

docker pull matheuscarv69/back-votes-challenge

🏃‍♂️ 2. Running

O comando abaixo executa a imagem baixada em um container, essa aplicação possui algumas env vars, atenção para as que possuem o sufixo HOST, neste você deve colocar o ipv4 da sua máquina.

docker run -d -p 8080:8080 -e SERVER_PORT=8080 -e DATABASE_URL="192.168.0.115:5432" -e DATABASE_DB="postgres" -e DATABASE_USER="postgres" -e DATABASE_PASSWORD="password" -e DB_SCHEMA="backvotes" -e DELAY_SCHELUDED_CHECK_SESSION="10000" -e KAFKA_HOST="192.168.0.115:29092" matheuscarv69/back-votes-challenge

🎲 Executando a API com o docker-compose

Com esse repositório já clonado em sua máquina e com todos os pré-requisitos atendidos.

  1. Você deve ir até a raiz do projeto onde o arquivo docker-compose.yml está.
  2. Deve abrir um terminal na raiz do projeto.
  3. Agora certifique-se que o seu Docker já está em execução.
  4. Execute o seguinte comando no terminal:
docker-compose up -d
  1. Com isso sua aplicação já está em execução por padrão na porta local 8080

🔧 Variáveis de Ambiente da Aplicação

ENV_VARS Descrição
SERVER_PORT Porta que a aplicação utilizará em sua execução. (Default: 8080)
DATABASE_URL Url do banco de dados utilizado. (Default: localhost:5432; Postgres)
DATABASE_DB Banco de dados utilizado dentro. (Default: postgres)
DATABASE_USER Usuário do banco de dados. (Default: postgres)
DATABASE_PASSWORD Senha do banco de dados. (Default: password)
DB_SCHEMA Esquema do banco de dados. (Default: backvotes)
DELAY_SCHELUDED_CHECK_SESSION Delay em milisegundos do Scheduled para verificar se sessão está fechada e buscar resultados de votação. (Default: 10000 = 10 segundos)
KAFKA_HOST Url do Kafka. (Default: localhost: 29092)

📝Fazendo requisições - Insomnia

Essa aplicação tem um workspace compartilhado com o projeto Back Votes Kafka Consumer com todas as requisições disponíveis configurado no aplicativo Insomnia, clicando no botão abaixo você pode baixar o workspace de requests utilizados nesse projeto.

A pasta com as Requests do Back Votes Kafka Consumer é chamada Kafka Consumer.

Run in Insomnia}

Além disso a mesma foi documentada usando o Swagger, por meio dele você também pode ter acesso as requisições e aos modelos de dados recebidos e enviados pela aplicação. Com a aplicação sendo executada, você pode acessar a página do Swagger por meio da url abaixo.

http://localhost:8080/api/v1/backvotes/swagger-ui/

Você acessará essa tela:

swagger

📡 Integrações externas 📶

Foi disponibilazada um API externa para verificar o CPF e a partir do response retornar autorizar ou não a votação do Associado.

https://user-info.herokuapp.com/users/%7Bcpf%7D

🚀 Back Votes Challenge Kafka Consumer 📚

Essa é uma API que foi desenvolvida para ser o Kafka Consumer para este Projeto, no link abaixo você pode acessar toda a documentação e a aplicação.

https://github.com/matheuscarv69/back-votes-challenge-kafka-consumer

🚀 Tecnologias 👩‍🚀

As seguintes tecnologias foram utilizadas no desenvolvimento do projeto.

  • Java 11
  • Spring Boot 2.5.4
    • Web
    • Data JPA
    • Feign
    • Validation
    • Profiles (dev)
  • Swagger
  • Flyway
  • Postgres
  • Kafka

👨🏻‍💻 Autor



Matheus Carvalho
🚀

Feito por Matheus Carvalho, entre em contato!✌🏻

votes-challenge's People

Contributors

matheuscarv69 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.