AplicaΓ§Γ£o de gamificaΓ§Γ£o de hΓ‘bitos com sistema de pontos automΓ‘ticos, leaderboard com polling e validaΓ§Γ£o comunitΓ‘ria via reports.
- β Cadastro e login de usuΓ‘rios (simples, sem email)
- β Registro rΓ‘pido de atividades via botΓ£o flutuante
- β Upload de fotos com conversΓ£o automΓ‘tica para WebP
- β Sistema de pontos automΓ‘tico
- β Leaderboard com atualizaΓ§Γ£o automΓ‘tica (polling de 10s)
- β Sistema de reports para validaΓ§Γ£o comunitΓ‘ria
- β Projetos pessoais com meta de horas semanais
- β Layout mobile-first com sidebar retrΓ‘til
Os pontos sΓ£o automΓ‘ticos baseados no tipo de atividade:
| Categoria | Tipo | Pontos | Teto DiΓ‘rio |
|---|---|---|---|
| RefeiΓ§Γ£o | Limpa/SaudΓ‘vel | +10 | Β±10 |
| RefeiΓ§Γ£o | Suja/NΓ£o saudΓ‘vel | -10 | Β±10 |
| ExercΓcio | Qualquer exercΓcio | +5 | 5 |
| Entorpecentes | Usar Tabaco | -5 | -5 |
| Projeto Pessoal | Meta semanal batida | +50 | 50/semana |
- Apenas 1 registro por categoria por dia civil: O sistema permite apenas UMA entrada de cada categoria por dia
- Tetos diΓ‘rios de pontos: Cada categoria tem um teto mΓ‘ximo de pontos que pode ser ganho/perdido por dia
- Data de referΓͺncia obrigatΓ³ria: Toda entrada deve informar o dia em que a atividade ocorreu (formato YYYY-MM-DD)
- Cadastro retroativo permitido: VocΓͺ pode registrar entradas de dias anteriores
Esta regra beneficia quem mantΓ©m consistΓͺncia ao longo do dia, em vez de acumular pontos com mΓΊltiplas entradas da mesma categoria.
| SituaΓ§Γ£o | Pontos | Permitido? |
|---|---|---|
| 1 refeiΓ§Γ£o limpa no dia | +10 | β Sim |
| 1 refeiΓ§Γ£o suja no dia | -10 | β Sim |
| Tentar 2Βͺ refeiΓ§Γ£o no mesmo dia | β | β Bloqueado |
| 1 exercΓcio no dia | +5 | β Sim |
| Tentar 2ΒΊ exercΓcio no mesmo dia | β | β Bloqueado |
| 1 registro de tabaco no dia | -5 | β Sim |
| Tentar 2ΒΊ registro de tabaco no mesmo dia | β | β Bloqueado |
| 1 alimentaΓ§Γ£o + 1 exercΓcio no mesmo dia | +15 | β Sim (categorias diferentes) |
| AlimentaΓ§Γ£o em dias diferentes | +10 por dia | β Sim |
| Categoria | Teto MΓ‘ximo | Teto MΓnimo |
|---|---|---|
| AlimentaΓ§Γ£o | +10 | -10 |
| ExercΓcios | +5 | 0 |
| Entorpecentes | 0 | -5 |
| Projetos Pessoais | +50/semana | 0 |
- UsuΓ‘rios reportam entradas suspeitas de outros usuΓ‘rios
- 3 ou mais reports β entrada automaticamente invalidada
- Entradas invalidadas nΓ£o contam pontos no leaderboard
- Tela de votaΓ§Γ£o mostra:
- Entradas pendentes para votar
- Minhas entradas invalidadas
- Todas as entradas invalidadas pela comunidade
- Crie um projeto com nome, descriΓ§Γ£o e meta de horas semanais
- Registre tempo diΓ‘rio dedicado ao projeto
- Ao bater a meta semanal β +50 pontos
- Acompanhe o progresso semanal
- Bun - Runtime JavaScript
- Hono - Framework HTTP leve
- SQLite - Banco de dados
- JWT - AutenticaΓ§Γ£o com cookies HTTP-only (24h)
- Sharp - Processamento de imagens (WebP)
- Vue 3 - Framework progressivo
- Vue Router - Roteamento
- Tailwind CSS v4 - EstilizaΓ§Γ£o
- TypeScript - Tipagem estΓ‘tica
- Docker Compose - OrquestraΓ§Γ£o de containers
- Caddy - Servidor web e proxy reverso
marcionatural/
βββ back/ # Backend (Bun + Hono)
β βββ src/
β β βββ routes/ # Rotas da API
β β β βββ auth.ts
β β β βββ leaderboard.ts
β β β βββ entries.ts
β β β βββ votes.ts
β β β βββ activity-types.ts
β β β βββ projects.ts
β β β βββ upload.ts
β β βββ services/ # LΓ³gica de negΓ³cio
β β βββ middleware/ # AutenticaΓ§Γ£o
β β βββ utils/ # UtilitΓ‘rios (JWT)
β β βββ db.ts # ConfiguraΓ§Γ£o SQLite
β β βββ schema.sql # Schema do banco
β β βββ seeds.sql # Seeds iniciais
β β βββ migrate.ts # Script de migraΓ§Γ£o
β β βββ index.ts # Entry point
β βββ uploads/ # Uploads de imagens
β βββ Dockerfile
βββ app/ # Frontend (Vue 3)
β βββ src/
β β βββ components/ # Componentes
β β β βββ Sidebar.vue
β β β βββ Header.vue
β β β βββ FloatingActionButton.vue
β β βββ views/ # Telas
β β β βββ Leaderboard.vue
β β β βββ MyEntries.vue
β β β βββ Projects.vue
β β β βββ Users.vue
β β β βββ UserEntries.vue
β β β βββ Voting.vue
β β β βββ Login.vue
β β β βββ Register.vue
β β βββ services/ # API client
β β βββ stores/ # Estado global (auth)
β β βββ composables/ # Composables (useSidebar)
β β βββ types/ # Tipos TypeScript
β β βββ router/ # Rotas
β βββ Dockerfile
βββ docker-compose.yml # OrquestraΓ§Γ£o Docker
# Construir e subir os containers
docker-compose up --build
# Acessar a aplicaΓ§Γ£o
http://localhost:9000
# Parar os containers
docker-compose downcd back
bun install
bun run dev
# http://localhost:3000cd app
bun install
bun run dev
# http://localhost:5173cd back
bun run migratePOST /api/auth/register- CadastroPOST /api/auth/login- LoginPOST /api/auth/logout- LogoutGET /api/auth/me- UsuΓ‘rio logado
GET /api/leaderboard- Ranking (polling 10s)GET /api/leaderboard/users- Lista de usuΓ‘riosGET /api/leaderboard/users/:id/entries- Entradas de usuΓ‘rio
GET /api/entries- Minhas entradasPOST /api/entries- Criar entradaPUT /api/entries/:id- Atualizar entradaDELETE /api/entries/:id- Deletar entradaGET /api/entries/activity-types/options- Tipos disponΓveis
POST /api/upload/image- Upload de imagem (multipart/form-data)- Retorna:
{ imageUrl: "/images/<uuid>.webp" } - Formatos: JPG, PNG, GIF, WebP
- Tamanho mΓ‘x: 5MB
- ConversΓ£o automΓ‘tica para WebP
- Retorna:
POST /api/entries/:id/report- Reportar entrada como suspeitaDELETE /api/entries/:id/report- Remover meu reportGET /api/entries/voting/available- Entradas para votar (pendentes)GET /api/entries/voting/invalidated- Todas entradas invalidadasGET /api/entries/voting/my-invalidated- Minhas entradas invalidadasGET /api/entries/voting/stats- EstatΓsticas de votaΓ§Γ£oGET /api/entries/:id/reports- Reports de uma entrada
GET /api/activity-types- Todos os tiposGET /api/activity-types/validated- Tipos validadosGET /api/activity-types/category/:id- Por categoriaPOST /api/activity-types/:id/vote- Votar em tipoGET /api/activity-types/:id/validation-status- StatusPOST /api/activity-types- Criar novo tipo
GET /api/projects- Meus projetosPOST /api/projects- Criar projetoPUT /api/projects/:id- Atualizar projetoDELETE /api/projects/:id- Deletar projetoPOST /api/projects/:id/log- Registrar tempoGET /api/projects/:id/weekly-progress- Progresso semanal
GET /api/health- Health checkGET /images/:filename- Serve imagem (desenvolvimento)
-
Leaderboard (
/leaderboard)- Ranking de usuΓ‘rios com polling de 10s
- Cards em mobile, tabela em desktop
- Clique para ver entradas de cada usuΓ‘rio
-
Minhas Entradas (
/my-entries)- CRUD de entradas
- Upload de foto com preview
- SeparaΓ§Γ£o: positivas, negativas, invalidadas
-
Projetos Pessoais (
/projects)- Lista de projetos
- Criar/editar projetos
- Registrar tempo diΓ‘rio
- Ver progresso semanal
-
UsuΓ‘rios (
/users)- Lista de todos os usuΓ‘rios
- Cards em mobile, tabela em desktop
- Clique para ver entradas de cada usuΓ‘rio
-
Entradas de UsuΓ‘rio (
/users/:userId/entries)- Tela dedicada com todas as entradas de um usuΓ‘rio
- Cards com foto thumb
- Clique no card β modal de detalhes
- Clique na foto β zoom em resoluΓ§Γ£o original
-
VotaΓ§Γ£o (
/voting)- Para Votar: Entradas pendentes de report
- Invalidadas: Todas as entradas invalidadas
- Minhas Invalidadas: Suas entradas invalidadas
- EstatΓsticas de votaΓ§Γ£o
-
Login/Register (
/login,/register)- Cards centralizados com design aprimorado
- FormulΓ‘rios com validaΓ§Γ£o
DisponΓvel em todas as telas (canto inferior direito):
- π Nova Entrada RΓ‘pida: Registrar refeiΓ§Γ£o ou exercΓcio com foto
- β±οΈ Registrar Projeto: Adicionar tempo a projeto pessoal
- Qualquer usuΓ‘rio pode reportar entrada suspeita de outro
- 3 ou mais reports β entrada automaticamente invalidada
- Entradas invalidadas β
points = 0no leaderboard - Cada usuΓ‘rio pode reportar uma vez por entrada
- Reports podem ser removidos pelo autor
- Formatos aceitos: JPG, PNG, GIF, WebP
- Tamanho mΓ‘ximo: 5MB
- ConversΓ£o automΓ‘tica para WebP
- Redimensionamento para mΓ‘x 1920px
- Nome ΓΊnico gerado com UUID
- Preview da imagem antes de enviar
- Abre com botΓ£o hamburger (mobile)
- Fecha ao clicar no overlay
- Fecha ao navegar para outra tela
- Desktop: sempre visΓvel, sem overlay
- Meta: horas semanais definidas pelo usuΓ‘rio
- Registro: diΓ‘rio, em minutos
- PontuaΓ§Γ£o: +50 se bater meta na semana
- Semana: padrΓ£o ISO (segunda a domingo)
users- UsuΓ‘rioscategories- Categorias de atividadesactivity_types- Tipos de atividade (catΓ‘logo)activity_type_votes- Votos em tipos de atividadeuser_entries- Entradas dos usuΓ‘riosentry_reports- Reports de entradas suspeitaspersonal_projects- Projetos pessoaisproject_daily_logs- Registros diΓ‘rios de projeto
Para aplicar migraΓ§Γ΅es no banco de dados:
cd back
bun run migrateO script:
- Cria tabela
entry_reportsse nΓ£o existir - Adiciona colunas em
user_entries:photo_original_name- Nome original do arquivophoto_identifier- Nome gerado (UUID)is_invalidated- Se entrada foi invalidadainvalidated_at- Data da invalidaΓ§Γ£o
- Cria Γndices para performance
# Rodar migraΓ§Γ£o
cd back && bun run migrate
# Desenvolvimento backend
cd back && bun run dev
# Desenvolvimento frontend
cd app && bun run dev
# Type-check frontend
cd app && bun run type-check
# Docker (produΓ§Γ£o)
docker-compose up --build
# Parar Docker
docker-compose downO projeto utiliza Playwright para testes de interface automatizados, rodando em modo headless com Chromium.
Todos os testes geram automaticamente:
- πΈ Screenshots em cada passo importante (pΓ‘gina completa)
- π¬ VΓdeos de toda a execuΓ§Γ£o do teste (1280x720)
- π Traces para debug em caso de falha
- π Logs detalhados no console com cores e emojis
app/
βββ e2e/
β βββ test-results/ # Resultados por teste
β β βββ auth-login-success/
β β β βββ 00-initial-state-2024-01-01T12_00_00.png
β β β βββ 01-login-page-2024-01-01T12_00_01.png
β β β βββ video.webm
β β β βββ trace.zip
β β βββ entries-create-failure/
β β βββ assert-fail-validacao-2024-01-01T12_00_02.png
β β βββ video.webm
β βββ screenshots/ # Screenshots organizados
β β βββ success/ # Screenshots de testes bem-sucedidos
β β β βββ login-success-2024-01-01T12_00_00.png
β β β βββ create-entry-2024-01-01T12_00_01.png
β β βββ error/ # Screenshots de erros
β β βββ validation-fail-2024-01-01T12_00_02.png
β β βββ assert-error-2024-01-01T12_00_03.png
β βββ tests/ # Arquivos de teste
β βββ utils/ # Helpers de teste
β βββ fixtures/ # Fixtures do Playwright
β βββ custom-reporter.ts # Reporter personalizado
βββ playwright-report/ # RelatΓ³rio HTML rico
β βββ index.html
β βββ ...
βββ playwright.config.ts # ConfiguraΓ§Γ£o do Playwright
app/
βββ e2e/
β βββ tests/
β β βββ auth.spec.ts # Login, registro, logout, rotas protegidas
β β βββ entries.spec.ts # CRUD de entradas, upload, filtros, paginaΓ§Γ£o
β β βββ leaderboard.spec.ts # Ranking, polling, pontos
β β βββ users.spec.ts # Lista de usuΓ‘rios, entradas de outros usuΓ‘rios
β β βββ voting.spec.ts # Reports, votaΓ§Γ£o, entradas invalidadas
β β βββ projects.spec.ts # Projetos pessoais, registro de tempo
β β βββ timeline.spec.ts # Timeline, ordenaΓ§Γ£o, filtros
β β βββ navigation.spec.ts # Sidebar, menu, FAB, toast messages
β βββ utils/
β β βββ test-helpers.ts # Helpers para screenshots e logs
β β βββ test-common.ts # FunΓ§Γ΅es reutilizΓ‘veis (login, navigate)
β βββ fixtures/
β β βββ test-fixtures.ts # Fixtures reutilizΓ‘veis
β βββ custom-reporter.ts # Reporter personalizado com logs
β βββ playwright.config.ts # ConfiguraΓ§Γ£o do Playwright
βββ playwright-report/ # RelatΓ³rio HTML (gerado)
βββ playwright.config.ts # Config (movido para app/)
# 1.1 Rodar backend com banco de testes
cd back
DATABASE_PATH=./data/test.db bun run dev
# 1.2 Em outro terminal, rodar frontend
cd app
bun run dev
# 1.3 Em outro terminal, rodar seed de testes
cd back
DATABASE_PATH=./data/test.db bun run seed-e2e# Todos os testes (headless) - gera screenshots, vΓdeos e logs
cd app
bun run e2e
# Interface interativa (recomendado para desenvolvimento)
bun run e2e:ui
# Browser visΓvel (para debug)
bun run e2e:headed
# Debug passo-a-passo
bun run e2e:debug
# Ver relatΓ³rio HTML
bun run e2e:report
# Limpar resultados anteriores
bun run e2e:clean
# Script completo automatizado (recomendado)
cd ..
./scripts/run-e2e-tests.sh| Script | DescriΓ§Γ£o |
|---|---|
bun run e2e |
Roda todos os testes (headless) com screenshots e vΓdeos |
bun run e2e:ui |
Abre interface interativa do Playwright |
bun run e2e:headed |
Roda testes com browser visΓvel |
bun run e2e:debug |
Debug passo-a-passo com inspector |
bun run e2e:report |
Abre relatΓ³rio HTML dos testes |
bun run e2e:clean |
Limpa resultados anteriores |
bun run e2e:full |
Script completo: prepara ambiente, roda testes e gera relatΓ³rio |
bun run e2e:dev |
Modo dev: roda testes e mantΓ©m serviΓ§os rodando |
bun run e2e:ci |
Modo CI/CD: headless, sem abrir relatΓ³rio, com retries |
Para facilitar o uso, existem scripts shell que automatizam todo o processo:
# Roda tudo automaticamente:
# - Limpa resultados anteriores
# - Executa seed E2E com migrations
# - Inicia backend e frontend
# - Aguarda serviΓ§os estarem prontos
# - Roda testes
# - Gera relatΓ³rio
# - Abre relatΓ³rio no browser
# - Para serviΓ§os
./scripts/run-e2e-tests.sh
# Ou via npm:
bun run e2e:fullOpΓ§Γ΅es do script:
# Browser visΓvel
./scripts/run-e2e-tests.sh --headed
# Debug passo-a-passo
./scripts/run-e2e-tests.sh --debug
# Interface interativa
./scripts/run-e2e-tests.sh --ui
# Rodar apenas testes especΓficos
./scripts/run-e2e-tests.sh --spec=tests/auth.spec.ts
# Manter serviΓ§os rodando apΓ³s testes
./scripts/run-e2e-tests.sh --keep-running
# NΓ£o limpar resultados anteriores
./scripts/run-e2e-tests.sh --no-clean
# NΓ£o abrir relatΓ³rio automaticamente
./scripts/run-e2e-tests.sh --no-open
# Ajuda
./scripts/run-e2e-tests.sh --helpIdeal para desenvolver testes. MantΓ©m os serviΓ§os rodando apΓ³s os testes.
./scripts/run-e2e-dev.sh
# Ou via npm:
bun run e2e:dev
# Com teste especΓfico
./scripts/run-e2e-dev.sh --spec=tests/auth.spec.tsVantagens:
- β ServiΓ§os permanecem rodando
- β Rode testes especΓficos rapidamente
- β FaΓ§a alteraΓ§Γ΅es no cΓ³digo e teste novamente
- β Economiza tempo de inicializaΓ§Γ£o
Para integraΓ§Γ£o contΓnua. Headless, sem abrir relatΓ³rio, com retries.
./scripts/run-e2e-ci.sh
# Ou via npm:
bun run e2e:ciCaracterΓsticas:
- π€ Headless (sem browser visΓvel)
- π 2 retries em caso de falha
- π Gera relatΓ³rio JUnit
- π« NΓ£o abre relatΓ³rio automaticamente
- β‘ Workers: 1 (para estabilidade)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ./scripts/run-e2e-tests.sh β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1. β
Verifica prΓ©-requisitos (bun, node) β
β 2. π§Ή Limpa resultados anteriores β
β 3. π± Executa seed E2E com migrations β
β 4. π Inicia backend (http://localhost:3000) β
β 5. π Inicia frontend (http://localhost:5173) β
β 6. β³ Aguarda serviΓ§os estarem prontos β
β 7. π§ͺ Roda testes E2E β
β 8. π Gera relatΓ³rio HTML β
β 9. π Abre relatΓ³rio no browser β
β 10. π Mostra resumo final β
β 11. π Para serviΓ§os β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Verificando prΓ©-requisitos
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ bun encontrado: 1.3.0
β
bun encontrado
βΉοΈ node encontrado: v20.19.0
β
node encontrado
β
DiretΓ³rio do projeto confirmado
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Limpando resultados anteriores
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ Limpando resultados anteriores...
β
Resultados limpos
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Executando Seed E2E
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ Rodando seed com migrations...
[seed output...]
β
Seed E2E executado com sucesso
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Iniciando Backend
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ Iniciando backend em background...
βΉοΈ Backend iniciado (PID: 12345)
βΉοΈ Aguardando backend estar pronto...
β
Backend pronto!
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Iniciando Frontend
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ Iniciando frontend em background...
βΉοΈ Frontend iniciado (PID: 12346)
βΉοΈ Aguardando frontend estar pronto...
β
Frontend pronto!
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Executando Testes E2E
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[Playwright test output...]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Gerando RelatΓ³rio
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉοΈ Gerando relatΓ³rio HTML...
β
Todos os testes passaram!
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Resumo da ExecuΓ§Γ£o
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π RESULTADOS DOS TESTES E2E
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βΉοΈ Screenshots gerados: 150
β βΉοΈ Screenshots de sucesso: 140
β βΉοΈ Screenshots de erro: 10
β βΉοΈ VΓdeos gerados: 73
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β π ARQUIVOS GERADOS
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β RelatΓ³rio HTML: /path/to/project/e2e/playwright-report
β Screenshots: /path/to/project/e2e/screenshots
β Test Results: /path/to/project/e2e/test-results
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Script concluΓdo!
π Todos os testes passaram!
======================================================================
π MARCIO NATURAL - TESTES E2E
======================================================================
π Total de testes: 73
π Base URL: http://localhost:9000
π§ Workers: 1
======================================================================
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π§ͺ [TESTE] deve realizar login com credenciais vΓ‘lidas
π tests/auth.spec.ts
π·οΈ Tags: nenhuma
β© [PASSO] Navegando para: PΓ‘gina de Login
πΈ [STEP] nav-Pagina-de-Login
π Test: e2e/test-results/auth-login-success/...
π Organized: e2e/screenshots/success/...
β© [PASSO] Preenchendo Username: "test_user_1"
πΈ [STEP] fill-username-input
β© [PASSO] Preenchendo Password: "teste123"
πΈ [STEP] fill-password-input
β© [PASSO] Clicando em: BotΓ£o Login
πΈ [STEP] click-login-button
β
[SUCESSO] Login realizado com sucesso!
======================================================================
β
TESTE PASSED
DuraΓ§Γ£o: 3245ms
======================================================================
bun run e2e:report
# Abre e2e/playwright-report/index.html no browser- Sucesso:
e2e/screenshots/success/ - Erro:
e2e/screenshots/error/
- Cada teste gera um
video.webmeme2e/test-results/<nome-do-teste>/
- Em caso de falha, um
trace.zipΓ© gerado - Visualize em: https://trace.playwright.dev/
O seed E2E cria os seguintes usuΓ‘rios:
| UsuΓ‘rio | Senha | DescriΓ§Γ£o |
|---|---|---|
test_user_1 |
teste123 |
UsuΓ‘rio padrΓ£o para testes |
test_user_2 |
teste123 |
UsuΓ‘rio com entradas reportΓ‘veis |
test_user_3 |
teste123 |
UsuΓ‘rio com poucas entradas |
test_leader |
teste123 |
LΓder do leaderboard (mais pontos) |
test_reporter |
teste123 |
UsuΓ‘rio para testar reports |
- β Login com credenciais vΓ‘lidas
- β Login com credenciais invΓ‘lidas (mensagem de erro)
- β Logout
- β Registro de novo usuΓ‘rio
- β ValidaΓ§Γ£o de senha (mΓnimo 6 caracteres, confirmaΓ§Γ£o)
- β Redirecionamento de rotas protegidas
- β Criar entrada via FAB
- β Upload de foto com preview
- β ValidaΓ§Γ£o: limite de 1 entrada por categoria/dia
- β Editar entrada existente
- β Excluir entrada com confirmaΓ§Γ£o
- β Filtros por tipo (positivas/negativas/invalidadas)
- β Filtros por perΓodo (hoje, ΓΊltima semana, tudo)
- β PaginaΓ§Γ£o (20+ entradas)
- β Modal de detalhes ao clicar no card
- β RenderizaΓ§Γ£o do ranking
- β Polling automΓ‘tico (10s)
- β NavegaΓ§Γ£o para entradas de usuΓ‘rio
- β ValidaΓ§Γ£o de pontos corretos
- β Layout responsivo (cards mobile, tabela desktop)
- β Lista de todos os usuΓ‘rios
- β NavegaΓ§Γ£o para entradas de outro usuΓ‘rio
- β VisualizaΓ§Γ£o de entradas com foto thumb
- β Modal de detalhes
- β Reportar entrada de outro usuΓ‘rio
- β 3+ reports β entrada invalidada automaticamente
- β Abas: Para Votar, Invalidadas, Minhas Invalidadas
- β EstatΓsticas de votaΓ§Γ£o
- β Remover report
- β Criar novo projeto
- β Editar projeto
- β Excluir projeto
- β Registrar tempo diΓ‘rio
- β Validar progresso semanal
- β Meta batida β +50 pontos
- β RenderizaΓ§Γ£o cronolΓ³gica
- β Entradas de todos os usuΓ‘rios
- β Filtros por perΓodo
- β DiferenciaΓ§Γ£o visual (positivas/negativas)
- β Sidebar abre/fecha (mobile)
- β Overlay fecha ao clicar
- β NavegaΓ§Γ£o por todas as rotas
- β BotΓ£o flutuante (FAB) em todas as telas
- β Mensagens toast (sucesso/erro)
- β Header com nome do usuΓ‘rio e logout
O Playwright estΓ‘ configurado em e2e/playwright.config.ts:
- Base URL:
http://localhost:9000(produΓ§Γ£o) ouhttp://localhost:5173(dev) - Browser: Chromium
- Timeout: 30s por teste
- VΓdeo: Gravado em caso de falha
- Screenshot: AutomΓ‘tico em falhas
- RelatΓ³rio: HTML em
e2e/playwright-report
-
Backend rodando com banco de testes:
cd back DATABASE_PATH=./data/test.db bun run dev -
Frontend rodando:
cd app bun run dev -
Seed de testes (sempre que reiniciar o banco):
cd back DATABASE_PATH=./data/test.db bun run seed-e2e -
Rodar testes:
cd app bun run e2e:ui # Interface interativa (recomendado)
Para integraΓ§Γ£o contΓnua, os testes podem ser rodados automaticamente:
# .github/workflows/e2e.yml
- Rodar backend + frontend em background
- Executar seed de testes
- bun run e2e (headless)
- Upload de relatΓ³rio e vΓdeos em caso de falha- Use
bun run e2e:uipara desenvolver testes interativamente - Use
bun run e2e:debugpara debug passo-a-passo - Screenshots e vΓdeos sΓ£o salvos em
e2e/test-results/em caso de falha - O relatΓ³rio HTML Γ© gerado em
e2e/playwright-report/
Copie .env.example para .env e configure:
# Backend
JWT_SECRET=sua-chave-secreta-aqui
# Frontend
VITE_API_URL=http://localhost
# Docker
FRONTEND_PORT=80
# Ambiente
NODE_ENV=productionMIT