Skip to content

feat(dashboard): implementar US-06 — Dashboard de Análise#84

Merged
lucasbrentano merged 4 commits intodevfrom
feature/us-06-dashboard
Apr 1, 2026
Merged

feat(dashboard): implementar US-06 — Dashboard de Análise#84
lucasbrentano merged 4 commits intodevfrom
feature/us-06-dashboard

Conversation

@lucasbrentano
Copy link
Copy Markdown
Collaborator

Resumo

  • Backend: 5 endpoints (/dashboard/global, /dashboard/video, /dashboard/user, /dashboard/bots, /dashboard/criteria-effectiveness) com agregações SQL batch e geração de gráficos Plotly (JSON)
  • Frontend: página Dashboard com 3 abas (Visão Geral, Por Vídeo, Meu Progresso), gráficos Plotly interativos, KPIs coloridos, tabela de bots paginada com filtros
  • Visão Geral: 7 KPIs (progresso, concordância, pendentes), donut, comparativo, timeline, taxa de bots, concordância por dataset, eficácia por critério, tabela de bots com colunas Anotadores e Critérios
  • Por Vídeo: dropdown de vídeos, 7 KPIs, destaques (autor mais ativo, mais respostas, likes, contas mais nova/antiga), 4 gráficos, tabela de bots pré-filtrada
  • Meu Progresso: 8 KPIs, 3 gráficos, tabela de progresso por dataset com barra visual e botão "Continuar anotando"
  • Filtro por critério de limpeza: checkboxes numérico/comportamental afetam KPIs, gráficos e tabela
  • AbbreviatedChart: substitui nomes longos por D1/D2 com legenda compacta abaixo
  • Rotas reorganizadas: routes/AppRoutes.tsx centraliza rotas, página 404 dedicada
  • Testes: 24 testes cobrindo KPIs, charts Plotly, filtros, segurança (username não exposto), dados vazios
  • Dependências: plotly (backend), plotly.js-dist-min (frontend)

Como testar

  • cd backend && source .venv/bin/activate && pip install plotly==5.24.1
  • DATABASE_URL=... pytest tests/test_dashboard.py -v — 24 testes passando
  • DATABASE_URL=... pytest — 184 testes passando (nenhuma regressão)
  • ruff check . && ruff format --check . && bandit -r . — backend limpo
  • cd frontend && npm install && npx tsc --noEmit && npx eslint . --ext .ts,.tsx && npx prettier --check . — frontend limpo
  • Acessar /dashboard — Visão Geral com KPIs e 6 gráficos
  • Selecionar vídeo na aba "Por Vídeo" — KPIs, destaques e gráficos filtrados
  • Aba "Meu Progresso" — KPIs pessoais, gráficos e tabela com progresso por dataset
  • Filtrar por critério na barra de checkboxes — KPIs e gráficos atualizam
  • Acessar URL inexistente (ex: /qualquercoisa) — página 404 com botão "Voltar ao início"
  • Acessar /dashboard sem login — redireciona para /login

lucasbrentano and others added 4 commits April 1, 2026 12:40
- 5 endpoints: /dashboard/global, /dashboard/video, /dashboard/user,
  /dashboard/bots, /dashboard/criteria-effectiveness
- Schemas Pydantic para request/response de cada endpoint
- Service com agregações SQL batch (sem N+1) e geração de gráficos
  Plotly (donut, bar, timeline, concordância, eficácia por critério)
- Filtro por critério de limpeza (interseção) em global e video
- Tabela de bots paginada com concordância, anotadores e critérios
- Destaques por vídeo (autor mais ativo, mais respostas, mais likes,
  conta mais nova/antiga, média de likes)
- Plotly adicionado ao requirements.txt
- Router registrado no main.py

Co-Authored-By: Claude <noreply@anthropic.com>
- TestGlobalDashboard: KPIs, charts Plotly válidos, filtro por critério,
  agreement rate, banco vazio retorna zeros
- TestVideoDashboard: dados filtrados por vídeo, vídeo inexistente
  retorna zeros, filtro por critério
- TestUserDashboard: dados exclusivos do pesquisador autenticado,
  não expõe dados de outro, status completed/in_progress/not_started
- TestBotComments: concordância, busca por texto
- TestCriteriaEffectiveness: eficácia por critério, filtro por vídeo
- TestSeguranca: nenhum endpoint expõe username de outros pesquisadores

Co-Authored-By: Claude <noreply@anthropic.com>
- DashboardPage com abas: Visão Geral, Por Vídeo, Meu Progresso
- GlobalTab: 7 KPIs (progresso, concordância, pendentes), 6 gráficos
  Plotly (donut, comparativo, timeline, taxa de bots, concordância
  por dataset, eficácia por critério), tabela de bots paginada com
  filtro por critério de limpeza
- VideoTab: dropdown de vídeos, 7 KPIs, destaques (autor mais ativo,
  mais respostas, likes, contas mais nova/antiga), 4 gráficos,
  tabela de bots pré-filtrada por vídeo
- UserTab: 8 KPIs (incluindo humanos), 3 gráficos, tabela de
  progresso por dataset com barra visual e botão "Continuar"
- PlotlyChart genérico com ResizeObserver + ChartCard com título
- AbbreviatedChart: substitui nomes longos por D1/D2 com legenda
- KpiCards com cores contextuais (emerald, red, amber, blue, orange)
- CriteriaFilterBar com checkboxes numérico/comportamental
- BotCommentsTable com colunas Anotadores e Critérios
- api/dashboard.ts e hooks/useDashboard.ts
- plotly.js-dist-min + @types/plotly.js instalados
- Card do dashboard ativado na HomePage

Co-Authored-By: Claude <noreply@anthropic.com>
- Criar routes/AppRoutes.tsx centralizando todas as rotas
- Simplificar App.tsx para usar apenas providers + AppRoutes
- Criar pages/NotFound/NotFoundPage.tsx com mensagem e botão de volta
- Substituir redirect silencioso por página 404 dedicada

Co-Authored-By: Claude <noreply@anthropic.com>
@lucasbrentano lucasbrentano enabled auto-merge April 1, 2026 15:43
@lucasbrentano lucasbrentano merged commit 5a30d19 into dev Apr 1, 2026
3 checks passed
@lucasbrentano lucasbrentano deleted the feature/us-06-dashboard branch April 1, 2026 15:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant