diegosneves / assembleia-vota

No cooperativismo, cada associado possui um voto e as decisões são tomadas em assembleias, por votação. Imagine que você deve criar uma solução para dispositivos móveis para gerenciar e participar dessas sessões de votação.
MIT License
1 stars 0 forks source link

Assembleia Vota

Linkedin badge CI Prod CI Develop

Resumo da Aplicação de Votação

Esta aplição é destinada a gerenciar e facilitar o processo de votação dentro do ambiente cooperativo. Utilizando uma API REST, a aplicação oferece os seguintes recursos:

Cada associado é identificado por um ID único e só pode votar uma vez por pauta. A aplicação foi construída em Java, com Spring-boot. Todos os dados de pautas e votos são persistidos e não são perdidos após o reinício da aplicação.

A segurança das interfaces foi abstraída e todas as chamadas para as interfaces são consideradas autorizadas.

O foco principal está na comunicação com o backend, onde as mensagens no formato JSON são trocadas. Vale ressaltar que o projeto não inclui a aplicação cliente, somente os componentes do servidor são avaliados.


Arquitetura do Projeto

Escolhemos utilizar a arquitetura Model-View-Controller (MVC) para estruturar nosso projeto. Aqui estão algumas razões para esta escolha:

  1. Separação de Concerns: A arquitetura MVC nos permite dividir a aplicação em três partes distintas - Model, View e Controller. Isso facilita o gerenciamento e a manutenção do código.

  2. Desenvolvimento Paralelo: Dividindo a aplicação em partes distintas, diferentes desenvolvedores podem trabalhar em diferentes partes da aplicação simultaneamente sem interferência.

  3. Reutilização de Código & Modulação: MVC permite um alto grau de reutilização de código e modularidade. Os componentes são facilmente intercambiáveis e reutilizáveis.

Neste projeto:

Ao adotar a arquitetura MVC, esperamos construir uma aplicação organizada, responsiva e de fácil manutenção.


Nova API Adicionada!

Foi criada uma nova API para ajudar na validação de CPF. Você pode encontrá-la no Docker sob o nome diegoneves/validator-fiscal:latest. Aqui está uma visão rápida das suas configurações no Docker Compose:

validator-fiscal-app:
    image: diegoneves/validator-fiscal:latest
    container_name: validator_fiscal_api
    ports:
      - "8001:8001"

Agora você pode usar essa API para simular a validação de CPF.


Swagger


Como Executar o Projeto

Os seguintes passos descrevem como configurar e executar o projeto usando Docker:

Pré-requisitos:

Opção 1: Sem Baixar o Repositório

  1. Crie o arquivo compose.yaml:

    Crie um novo arquivo chamado compose.yaml no diretório desejado em sua máquina local e copie o conteúdo abaixo para este arquivo:

    
    services:
    database:
    image: "mysql:latest"
    container_name: assembleia_mysql_db
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
    ports:
      - "3307:3306"
    volumes:
      - db-mysql-assembleia:/var/lib/mysql
    
    validator-fiscal-app:
    image: diegoneves/validator-fiscal:latest
    container_name: validator_fiscal_api
    ports:
      - "8001:8001"
    
    assembleia-app:
    image: diegoneves/assembleia-vota:latest
    container_name: assembleia_vota_api
    ports:
      - "8080:8080"
      - "5005:5005"
    depends_on:
      - database
    environment:
      - DB_HOST=database
      - DB_PORT=3306
      - FISCAL_HOST=validator-fiscal-app
      - FISCAL_PORT=8001
    entrypoint: sh -c "dockerize -wait tcp://database:3306 -timeout 60s && java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar target/assembleia-vota.jar"

volumes: db-mysql-assembleia:


2. **Configure as Variáveis de Ambiente:**

   Crie um arquivo chamado `.env` no mesmo diretório do compose.yaml. Substitua os valores `DB_NAME` e `DB_PASSWORD` pelas suas informações do banco de dados:

```dotenv
DB_USERNAME=root
DB_PASSWORD=local_password
DB_NAME=local_db
DB_PORT=3307
DB_HOST=localhost
FISCAL_HOST=localhost
FISCAL_PORT=8001
  1. Execute o Docker Compose:

    Agora você pode iniciar os serviços com o seguinte comando:

docker compose up -d

Observações sobre Compatibilidade

Por favor, esteja ciente de que estamos usando dockerize tanto no Dockerfile quanto no compose.yaml. O dockerize é utilizado neste contexto para garantir que o banco de dados seja inicializado primeiro, antes de lançar a API. Isso evita problemas ao tentar conectar-se ao banco de dados antes que ele esteja pronto para aceitar conexões.

Embora dockerize funcione sem problemas na maioria das plataformas, existem problemas conhecidos de compatibilidade com a arquitetura do Mac.

Se você estiver usando um Mac e encontrar problemas ao tentar executar este projeto, considere verificar se o dockerize é compatível com a versão atual do seu sistema operacional.

Estamos atualmente em processo de pesquisar alternativas para dockerize que serão compatíveis em todas as plataformas. Futuramente, os arquivos serão atualizados para refletir essas mudanças.

Alternativamente, você pode tentar usar soluções alternativas até que este problema de compatibilidade esteja resolvido.


Opção 2: Baixando o Repositório

  1. Clone o repositório:

    git clone git@github.com:diegosneves/assembleia-vota.git
  2. Vá até o diretório do repositório

  3. Configure as variáveis de ambiente

    Edite o arquivo .env, substitua os valores DB_NAME e DB_PASSWORD pelas suas informações do banco de dados.

    DB_USERNAME=root
    DB_PASSWORD=local_password
    DB_NAME=local_db
    DB_PORT=3307
    DB_HOST=localhost
    FISCAL_HOST=localhost
    FISCAL_PORT=8001
  4. Execute o Docker Compose

docker compose up -d

O serviço agora está rodando e pode ser acessado na porta 8080.

Lembre-se de substituir "sua_base_de_dados" e "sua_senha" com as informações reais do seu banco de dados. Além disso, é importante lembrar que versões diferentes do Docker e do Docker Compose podem ter diferentes sintaxes e comportamentos, portanto, garanta que você está usando a mesma versão para evitar problemas.


Como usar a API

Esta seção descreve como usar a nossa API como documentada no Swagger, com ênfase nas IDs necessárias em cada etapa.

  1. Criar pauta: A primeira ação que precisa ser realizada é criar uma nova pauta. A resposta desta chamada incluirá uma ID que será necessária para as próximas etapas.

  2. Abrir sessão de votação: Com a ID recebida ao criar a pauta, você pode agora abrir uma nova sessão de votação. Para isso, você precisa enviar a ID da pauta no corpo da solicitação.

  3. Votar: Para votar, você precisa da ID da sessão, que foi resultado ao abrir a sessão de votação no passo anterior. Além da ID da sessão, você deve fornecer seu CPF e sua escolha de voto (Sim ou Não).

  4. Ver resultados: Para consultar o resultado da votação, você deve enviar a ID da Pauta através do path da solicitação. Esta chamada irá retornar os resultados para a pauta especificada pela ID.

Seguindo estas instruções, você poderá interagir efetivamente com a nossa API e realizar ações como criar pautas, abrir sessões de votação e votar.