Skip to content

mateuscfonseca/marcionatural

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

62 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌿 Marcio Natural

AplicaΓ§Γ£o de gamificaΓ§Γ£o de hΓ‘bitos com sistema de pontos automΓ‘ticos, leaderboard com polling e validaΓ§Γ£o comunitΓ‘ria via reports.

Funcionalidades

  • βœ… 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

Como Funciona

Sistema de Pontos

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

Regras de NegΓ³cio

Limite de 1 Entrada por Categoria por Dia

  • 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

Por que essa regra?

Esta regra beneficia quem mantΓ©m consistΓͺncia ao longo do dia, em vez de acumular pontos com mΓΊltiplas entradas da mesma categoria.

Exemplos PrΓ‘ticos

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

Tetos DiΓ‘rios por Categoria

Categoria Teto MΓ‘ximo Teto MΓ­nimo
AlimentaΓ§Γ£o +10 -10
ExercΓ­cios +5 0
Entorpecentes 0 -5
Projetos Pessoais +50/semana 0

ValidaΓ§Γ£o ComunitΓ‘ria (Reports)

  • 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

Projetos Pessoais

  1. Crie um projeto com nome, descriΓ§Γ£o e meta de horas semanais
  2. Registre tempo diΓ‘rio dedicado ao projeto
  3. Ao bater a meta semanal β†’ +50 pontos
  4. Acompanhe o progresso semanal

Tecnologias

Backend

  • Bun - Runtime JavaScript
  • Hono - Framework HTTP leve
  • SQLite - Banco de dados
  • JWT - AutenticaΓ§Γ£o com cookies HTTP-only (24h)
  • Sharp - Processamento de imagens (WebP)

Frontend

  • Vue 3 - Framework progressivo
  • Vue Router - Roteamento
  • Tailwind CSS v4 - EstilizaΓ§Γ£o
  • TypeScript - Tipagem estΓ‘tica

Infraestrutura

  • Docker Compose - OrquestraΓ§Γ£o de containers
  • Caddy - Servidor web e proxy reverso

Estrutura do Projeto

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

Como Rodar

Com Docker (Recomendado)

# Construir e subir os containers
docker-compose up --build

# Acessar a aplicaΓ§Γ£o
http://localhost:9000

# Parar os containers
docker-compose down

Desenvolvimento Local

Backend

cd back
bun install
bun run dev
# http://localhost:3000

Frontend

cd app
bun install
bun run dev
# http://localhost:5173

Rodar MigraΓ§Γ΅es

cd back
bun run migrate

API Endpoints

AutenticaΓ§Γ£o

  • POST /api/auth/register - Cadastro
  • POST /api/auth/login - Login
  • POST /api/auth/logout - Logout
  • GET /api/auth/me - UsuΓ‘rio logado

Leaderboard

  • GET /api/leaderboard - Ranking (polling 10s)
  • GET /api/leaderboard/users - Lista de usuΓ‘rios
  • GET /api/leaderboard/users/:id/entries - Entradas de usuΓ‘rio

Entradas

  • GET /api/entries - Minhas entradas
  • POST /api/entries - Criar entrada
  • PUT /api/entries/:id - Atualizar entrada
  • DELETE /api/entries/:id - Deletar entrada
  • GET /api/entries/activity-types/options - Tipos disponΓ­veis

Upload de Imagens

  • 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

Reports e VotaΓ§Γ£o

  • POST /api/entries/:id/report - Reportar entrada como suspeita
  • DELETE /api/entries/:id/report - Remover meu report
  • GET /api/entries/voting/available - Entradas para votar (pendentes)
  • GET /api/entries/voting/invalidated - Todas entradas invalidadas
  • GET /api/entries/voting/my-invalidated - Minhas entradas invalidadas
  • GET /api/entries/voting/stats - EstatΓ­sticas de votaΓ§Γ£o
  • GET /api/entries/:id/reports - Reports de uma entrada

Activity Types

  • GET /api/activity-types - Todos os tipos
  • GET /api/activity-types/validated - Tipos validados
  • GET /api/activity-types/category/:id - Por categoria
  • POST /api/activity-types/:id/vote - Votar em tipo
  • GET /api/activity-types/:id/validation-status - Status
  • POST /api/activity-types - Criar novo tipo

Projetos Pessoais

  • GET /api/projects - Meus projetos
  • POST /api/projects - Criar projeto
  • PUT /api/projects/:id - Atualizar projeto
  • DELETE /api/projects/:id - Deletar projeto
  • POST /api/projects/:id/log - Registrar tempo
  • GET /api/projects/:id/weekly-progress - Progresso semanal

UtilitΓ‘rios

  • GET /api/health - Health check
  • GET /images/:filename - Serve imagem (desenvolvimento)

Telas do Frontend

  1. Leaderboard (/leaderboard)

    • Ranking de usuΓ‘rios com polling de 10s
    • Cards em mobile, tabela em desktop
    • Clique para ver entradas de cada usuΓ‘rio
  2. Minhas Entradas (/my-entries)

    • CRUD de entradas
    • Upload de foto com preview
    • SeparaΓ§Γ£o: positivas, negativas, invalidadas
  3. Projetos Pessoais (/projects)

    • Lista de projetos
    • Criar/editar projetos
    • Registrar tempo diΓ‘rio
    • Ver progresso semanal
  4. UsuΓ‘rios (/users)

    • Lista de todos os usuΓ‘rios
    • Cards em mobile, tabela em desktop
    • Clique para ver entradas de cada usuΓ‘rio
  5. 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
  6. VotaΓ§Γ£o (/voting)

    • Para Votar: Entradas pendentes de report
    • Invalidadas: Todas as entradas invalidadas
    • Minhas Invalidadas: Suas entradas invalidadas
    • EstatΓ­sticas de votaΓ§Γ£o
  7. Login/Register (/login, /register)

    • Cards centralizados com design aprimorado
    • FormulΓ‘rios com validaΓ§Γ£o

BotΓ£o Flutuante

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

Regras de NegΓ³cio

ValidaΓ§Γ£o por Reports

  • Qualquer usuΓ‘rio pode reportar entrada suspeita de outro
  • 3 ou mais reports β†’ entrada automaticamente invalidada
  • Entradas invalidadas β†’ points = 0 no leaderboard
  • Cada usuΓ‘rio pode reportar uma vez por entrada
  • Reports podem ser removidos pelo autor

Upload de Imagens

  • 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

Sidebar Mobile

  • Abre com botΓ£o hamburger (mobile)
  • Fecha ao clicar no overlay
  • Fecha ao navegar para outra tela
  • Desktop: sempre visΓ­vel, sem overlay

Projeto Pessoal

  • 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)

Banco de Dados

Tabelas Principais

  • users - UsuΓ‘rios
  • categories - Categorias de atividades
  • activity_types - Tipos de atividade (catΓ‘logo)
  • activity_type_votes - Votos em tipos de atividade
  • user_entries - Entradas dos usuΓ‘rios
  • entry_reports - Reports de entradas suspeitas
  • personal_projects - Projetos pessoais
  • project_daily_logs - Registros diΓ‘rios de projeto

MigraΓ§Γ£o

Para aplicar migraΓ§Γ΅es no banco de dados:

cd back
bun run migrate

O script:

  1. Cria tabela entry_reports se nΓ£o existir
  2. Adiciona colunas em user_entries:
    • photo_original_name - Nome original do arquivo
    • photo_identifier - Nome gerado (UUID)
    • is_invalidated - Se entrada foi invalidada
    • invalidated_at - Data da invalidaΓ§Γ£o
  3. Cria Γ­ndices para performance

Scripts Úteis

# 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 down

πŸ§ͺ Testes E2E (End-to-End)

O projeto utiliza Playwright para testes de interface automatizados, rodando em modo headless com Chromium.

πŸ“Έ Logs e Screenshots AutomΓ‘ticos

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

Estrutura de Arquivos Gerados

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

Estrutura de Testes

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/)

Como Rodar os Testes

1. Preparar o Ambiente

# 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

2. Rodar Testes

# 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

Scripts DisponΓ­veis

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

πŸš€ Scripts Automatizados

Para facilitar o uso, existem scripts shell que automatizam todo o processo:

1. Script Completo (Recomendado)

# 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:full

OpΓ§Γ΅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 --help

2. Modo Desenvolvimento

Ideal 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.ts

Vantagens:

  • βœ… ServiΓ§os permanecem rodando
  • βœ… Rode testes especΓ­ficos rapidamente
  • βœ… FaΓ§a alteraΓ§Γ΅es no cΓ³digo e teste novamente
  • βœ… Economiza tempo de inicializaΓ§Γ£o

3. Modo CI/CD

Para integraΓ§Γ£o contΓ­nua. Headless, sem abrir relatΓ³rio, com retries.

./scripts/run-e2e-ci.sh

# Ou via npm:
bun run e2e:ci

CaracterΓ­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)

πŸ“‹ Fluxo Completo do Script

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ./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                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“Š Exemplo de SaΓ­da do Script

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
πŸ“ 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!

πŸ“Š Exemplo de SaΓ­da no Console

======================================================================
πŸš€ 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
======================================================================

🎬 Visualizar Resultados

RelatΓ³rio HTML

bun run e2e:report
# Abre e2e/playwright-report/index.html no browser

Screenshots

  • Sucesso: e2e/screenshots/success/
  • Erro: e2e/screenshots/error/

VΓ­deos

  • Cada teste gera um video.webm em e2e/test-results/<nome-do-teste>/

Traces (Debug)

Credenciais de Teste

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

Casos de Teste

AutenticaΓ§Γ£o (auth.spec.ts)

  • βœ… 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

Entradas (entries.spec.ts)

  • βœ… 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

Leaderboard (leaderboard.spec.ts)

  • βœ… 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)

UsuΓ‘rios (users.spec.ts)

  • βœ… Lista de todos os usuΓ‘rios
  • βœ… NavegaΓ§Γ£o para entradas de outro usuΓ‘rio
  • βœ… VisualizaΓ§Γ£o de entradas com foto thumb
  • βœ… Modal de detalhes

VotaΓ§Γ£o (voting.spec.ts)

  • βœ… Reportar entrada de outro usuΓ‘rio
  • βœ… 3+ reports β†’ entrada invalidada automaticamente
  • βœ… Abas: Para Votar, Invalidadas, Minhas Invalidadas
  • βœ… EstatΓ­sticas de votaΓ§Γ£o
  • βœ… Remover report

Projetos (projects.spec.ts)

  • βœ… Criar novo projeto
  • βœ… Editar projeto
  • βœ… Excluir projeto
  • βœ… Registrar tempo diΓ‘rio
  • βœ… Validar progresso semanal
  • βœ… Meta batida β†’ +50 pontos

Timeline (timeline.spec.ts)

  • βœ… RenderizaΓ§Γ£o cronolΓ³gica
  • βœ… Entradas de todos os usuΓ‘rios
  • βœ… Filtros por perΓ­odo
  • βœ… DiferenciaΓ§Γ£o visual (positivas/negativas)

NavegaΓ§Γ£o (navigation.spec.ts)

  • βœ… 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

ConfiguraΓ§Γ£o

O Playwright estΓ‘ configurado em e2e/playwright.config.ts:

  • Base URL: http://localhost:9000 (produΓ§Γ£o) ou http://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

Workflow de Desenvolvimento

  1. Backend rodando com banco de testes:

    cd back
    DATABASE_PATH=./data/test.db bun run dev
  2. Frontend rodando:

    cd app
    bun run dev
  3. Seed de testes (sempre que reiniciar o banco):

    cd back
    DATABASE_PATH=./data/test.db bun run seed-e2e
  4. Rodar testes:

    cd app
    bun run e2e:ui  # Interface interativa (recomendado)

CI/CD (Futuro)

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

Dicas

  • Use bun run e2e:ui para desenvolver testes interativamente
  • Use bun run e2e:debug para 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/

VariΓ‘veis de Ambiente

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=production

LicenΓ§a

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors