Skip to content

thiagobdp/gerenciador-de-assembleias

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gerenciador de Assembleias para Votação

Iniciando

Clone este repositório em seu computador: https://github.com/thiagobdp/gerenciador-de-assembleias

Configurando MySql

Instalar Visual Studio 2015, 2017 e 2019

Para utilizar o MySQL é necessário primeiro instalar o Visual Studio.

Versões mais recentes do Visual C++:

A versão utilizada neste projeto é o link abaixo:

Instalar MySQL 8.0.25

MySQL Installer 8.0.25:

ou diretamente pelo link:

Sugestão de senha para root:

  • mysql password: root

Criar um novo banco de dados e um usuário para a aplicação

Abra o aplicativo MySQL 8.0 Command Line Client. Ao abrir será solicitada a senha de root fornecida no passo anterior.

Execute os seguintes comando no mysql prompt ( mysql> ):

1- Cria o novo banco

  • create database bd_gerenciador_assembleias;

2- Cria o novo usuário

  • create user 'pmanageruser'@'%' identified by 'pmanageruser';

3- Fornece todos privilégios para o novo usuário no novo banco de dados

  • grant all on bd_gerenciador_assembleias.* to 'pmanageruser'@'%';

As tabelas serão criadas neste banco de dados automaticamente pelo Hibernate quando a aplicação for inicializada.

Objetivo

O objetivo desta aplicação é gerenciar a votação de assembleias.

É possível consultar a documentação Swagger pelo link abaixo quando executando em localhost:

Para a correta execução da aplicação, é importante primeiro executar os passos da "Tarefa Bônus 2" para instalar o Apache Kafka e deixá-lo executando em terminais windows.

Tarefa Bônus 1 - Integração com sistemas externos

Criei o projeto git abaixo para servir como sistema externo para integração

O serviço está disponível na URL

E a documentação Swagger está disponível na URL

Ao realizar o voto, a aplicação validará nessa API externa se o CPF informado é válido. Caso seja valido, retornará permitindo o voto. Caso seja inválido, retornará erro.

Tarefa Bônus 2 - Mensageria e filas

Instalar JRE 64bits

Para evitar o problema no Kafka de OutOfMemory, é necessário instalar a versão 64bits do Java disponível nos dois links abaixo. Essa aplicação foi testado no OS Windows 10

Definir variável de ambiente JAVA_HOME

  1. No windows, em "Propriedades do Sistema" clicar em "Variáveis de Ambiente"
  2. Definir a variável para a nova instalação da JRE 64bits
  3. Nome da variável: JAVA_HOME
  4. Valor da variável: C:\Program Files\Java\jre1.8.0_291 -> Neste caso substitua pelo diretório em que seu java 64bits está instalado

Configurando Apache Kafka

Baixar a versão do link abaixo

Descompactar no diretório "C:/". Se utilizar outro diretório, na hora de executar, o windows pode reclamar que o caminho é muito longo para executar.

O programa 7zip realiza realiza o descompactamento

Ao descompactar, irá gerar um arquivo chamado "kafka_2.13-2.8.0.tar". Também é necessário descompatar esse arquivo utilizando o 7zip.

O resultado final será um diretório chamado "kafka_2.13-2.8.0"

Iniciar o Zookeeper

Antes de iniciar o Kafka, é necessário iniciar o Zookeeper

  1. abrir prompt de comando do Windows (cmd)
  2. executar o comando: cd C:\kafka_2.13-2.8.0
  3. executar o comando: bin\windows\zookeeper-server-start.bat config\zookeeper.properties
  4. Se ocorrer o erro 'Error: missing server' JVM at C:\Program Files (x86)\Java\jre1.8.0_291\bin\server\jvm.dll'. Please install or use the JRE or JDK that contains these missing components. Executar o passo 5, se não, pular para o passo 9
  5. Via Explorador de Arquivos (Windows Explorer) navegar até o diretório "C:\Program Files (x86)\Java\jre1.8.0_291\bin"
  6. Criar um diretório vazio chamado "server"
  7. Copiar todo o conteúdo do diretório "client" para o novo diretório "server". Atenção para copiar somente o conteúdo do diretório "client". O próprio diretório "client" não deve ser copiado, somente seu conteúdo.
  8. Executar novamente o passo 3.
  9. Se o Zookeeper foi iniciado com sucesso, uma das linhas exibidas no terminal será: INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)
  10. Não fechar (apenas minimizar) este terminal pois o Zookeeper ficará sendo executado nele.

Iniciar o Kafka

  1. Abrir novo prompt de comando do Windows (cmd)
  2. executar o comando: cd C:\kafka_2.13-2.8.0
  3. executar o comando: bin\windows\kafka-server-start.bat config\server.properties
  4. Se o Kafka foi iniciado com sucesso pela primeira vez, uma das linhas exibidas no terminal será: INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
  5. Por padrão o kafka é executado na porta 9092

Criar tópico via terminal

Será criado um tópico via terminal pois a aplicação será responsável somente por enviar a mensagem.

  1. Abrir prompt de comando do Windows (cmd)
  2. Executar o comando: cd C:\kafka_2.13-2.8.0
  3. Executar o comando: bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic NOVO_RESULTADO_VOTACAO
  4. Se o topico for criado com sucesso, aparecerá a mensagem: Created topic NOVO_RESULTADO_VOTACAO.
  5. Para listar os tópicos, executar o comando bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092

Iniciar consumidor via terminal

Para facilitar o desenvolvimento, o consumidor das mensagens enviadas pela aplicação "Gerenciador de Assembleias para Votação" para o tópico criado no item acima, será o terminal do windows.

  1. Abrir prompt de comando do Windows (cmd)
  2. Executar o comando: cd C:\kafka_2.13-2.8.0
  3. Executar o comando: bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic NOVO_RESULTADO_VOTACAO --from-beginning
  4. Com o comando acima, o consumidor exibirá todas as mensagem que já foram enviadas e ficará ouvindo por novas mensagens
  5. Sempre que uma sessão de votação fechar, será enviada a mensagem para o kafka e será exibida neste terminal pelo consumidor

Envio da mensagem pelo produtor (aplicação "Gerenciador de Assembleias para Votação")

A mensagem é enviada quando o sistema identifica que a sessão passou do prazo.

Para fins de simplificação, a validação do prazo é realizada quando alguma operação é feita na pauta, ou seja, quando algum dos serviços abaixo são executados:

  • /pauta/{id}
  • /voto/votar

Desta forma, após abrir a sessão, para que a mesagem seja enviada, é necessário executar algum dos serviços acima após passar o horário da sessão.

🔬 Testes automatizados de integração

Foram criados testes automatizados para todos Controller, tendo:

  • PautaController - 100% de cobertura
  • VotoController - 87,2% de cobertura

Resultando no total de cobertura de teste do sistema em 85,9%.

Utilize Manven Test para executar todos teste juntos. No Eclipse IDE, clique com o botão direito do mouse "pom.xml" -> "Run as" -> "Maven test".

Os testes utilizam o profile "test", e as operações são executadas no banco de dados em memória H2 e não no MySQL, assim isola os testes dos dados reais da aplicação.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages