Skip to content

Movendo da Interface CLI para Interface Web Completa e Roteamento FastAPI - #76

Merged
caio-unicamp merged 136 commits into
developfrom
feature/interface
Oct 9, 2026
Merged

caio-unicamp merged 136 commits into
developfrom
feature/interface

Conversation

@caio-unicamp

Copy link
Copy Markdown
Collaborator

Resumo

Este Pull Request introduz a refatoração completa da aplicação de um modelo baseado em CLI (Command Line Interface) para uma Interface Web completa e responsiva, utilizando FastAPI e Jinja2. O foco principal desta entrega é garantir acessibilidade para usuários não técnicos, centralizar a navegação em um Dashboard e desacoplar a lógica de negócio de entradas de terminal (input/print).

Issues Vinculadas

Resolves #35 (Interface visual intuitiva para não técnicos)

Resolves #45 (Retorno ao menu principal mantendo a sessão)

Resolves #38 (Configuração do Frontend base e rotas)

Resolves #39 (Refatoração da camada de serviço desacoplando CLI)

Resolves #46 (Dashboard central e preservação do estado de autenticação)

O que foi implementado

1. Refatoração Backend e API (Desacoplamento)

  • Remoção de CLI acoplado: A lógica core dos domínios (CACo, Austrália, BoTC) foi totalmente desacoplada de print() e input().

  • Roteadores FastAPI: Implementação da arquitetura baseada em rotas com arquivos separados (auth_router.py, australia_router.py, caco_router.py, botc_router.py) expondo a lógica via HTTP.

  • Injeção de Dependência: Uso do Annotated[Usuario, Depends(obter_usuario_logado)] para validar requisições e carregar o escopo do usuário em tempo real.

2. Interface de Usuário e Frontend (Jinja2 + CSS)

  • Layout Base: Criação do base.html com cabeçalho de contexto e controle universal de Logout.

  • Autenticação: Telas de Login e Cadastro, com feedback visual (Alerts) para senhas erradas ou tipos de conta inválidos.

Telas de Votação (3 Domínios):

  • Austrália: Cédula renderizada dinamicamente. Validações matemáticas estritas no backend (rejeição de posições repetidas, saltadas ou falta de candidatos).

  • CACo (Assembleia): Tela com controles de Gestão (Iniciar/Encerrar Votação) e botões de voto para os estudantes. Inclusão de tela com barra de progresso visual simulando resultados reais.

  • Blood on the Clocktower: Interface da cidade permitindo que o Storyteller realize apurações e levante votos com as restrições corretas de escopo.

3. Dashboard Central e Fluxo Contínuo

  • Gestão de Sessão: Implementação de Cookies HTTPOnly para gerenciar as sessões, garantindo que a transição entre telas ocorra sem perda de autenticação.

  • Hub Direcional: Dashboard exibe apenas os painéis permitidos pelo escopo da conta (Roteamento Polimórfico).

  • Bloqueio de Voto Duplo: Controle defensivo em memória (app.state) que intercepta usuários que já votaram, impedindo que a cédula seja contabilizada duas vezes e exibindo erro claro na interface.

Qualidade e Segurança

  • Ruff Compliant: Todo o código atende às regras formais do Python moderno.
  • Cobertura de Testes (100%): Suíte de testes (test_web.py) ampliada atingindo 100% de coverage nos roteadores. Inclui:
  • Testes de invasão de escopos (cross-router).
  • Testes de corrupção de sessão (usuário deletado no DB, RA inexistente).

Critérios de Aceitação

  • O usuário consegue realizar todo o fluxo (login, seleção de contexto, votação e logout) através de cliques em uma interface visual no browser.
  • O sistema exibe mensagens de feedback visual no lugar de prints no console.
  • A interface não exige que o usuário digite nenhum comando de texto para navegar entre as telas.
  • Após confirmar o voto e visualizar o recibo, há um botão claro "Voltar ao Dashboard".
  • Ao clicar em retornar, o sistema mantém o token do usuário ativo.
  • O Dashboard central lista todas as eleições/pautas disponíveis, indicando visualmente quais o usuário já participou (estado concluído) e quais estão pendentes.

Descrição Técnica

Configurar a base do projeto frontend e o sistema de roteamento (rotas da aplicação), criando o esqueleto onde as telas serão construídas.

Checklist de Implementação

  • Inicializado o projeto frontend.
  • Linter configurado e formatado para o frontend.
  • Implementado os roteadores básicos.
  • Página de layout base criada.
  • Chamadas de input() de dentro das classes de serviço removidas.
  • Criados rotas para expor os métodos do ServicoAutenticacao para a Web.
  • Criados adaptadores para injetar cédulas formatadas nos motores (Austrália, BOTC, CACo) a partir de requisições do frontend.
  • Criada a tela Dashboard.html que busca e lista as pautas ativas no backend.
  • Implementada a lógica visual para bloquear cards de eleições onde o usuário já submeteu voto.
  • Garante que o estado de sessão não seja limpo ao transitar entre rotas internas.

Ainda preciso implementar o drag and drop futuramente
… utilitário só em vez de repetir em cada arquivo
Tem que fazer para os outros admins ainda, como storyteller de botc e talvez criar uma classe para admin de votação da australia

@jsnardo281272 jsnardo281272 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Boa base pra interface, tá aprovado :)

@caio-unicamp
caio-unicamp merged commit 822857e into develop Oct 9, 2026
3 checks passed
@jsnardo281272 jsnardo281272 linked an issue Oct 10, 2026 that may be closed by this pull request
6 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Atividade3 enhancement New feature or request

Projects

2 participants