# 05 — Funcionalidades Detalhadas ## Módulo 1: Dashboard (Visão Geral) **Rota:** `/dashboard` **Prioridade:** Alta ### O que mostra: - **Cartão de jogo LIVE** (se houver jogo a decorrer) com link rápido para Live Editor - **Próximos jogos** (2-3 próximas partidas) - **Últimos resultados** (2-3 jogos recentes) - **Métricas rápidas:** Total de jogos, golos marcados, jornada atual - **Top 3 artilheiros** - **Top 3 da classificação** ### Comportamento: - Se houver jogo LIVE, o cartão aparece em destaque no topo com pulse animation - Dados atualizados em tempo real via Firestore listeners - Links diretos para edição de cada entidade --- ## Módulo 2: Gestão de Jogos **Rota:** `/games` **Prioridade:** Crítica ### Lista de Jogos (`/games`) - Filtro por jornada (dropdown ou tabs) - Filtro por estado: Todos / Agendados / Terminados / Live - Cards de jogo com: clubes, data/hora, resultado (se existir), estado - Botão "Novo Jogo" - Botão "Iniciar" (para jogos agendados) - Botão "Live" (para jogos a decorrer — destaque verde) ### Criar/Editar Jogo (`/games/new` e `/games/:id/edit`) **Campos:** - Jornada (select) - Data e hora - Clube casa (select com crest) - Clube fora (select com crest) - Local/estádio - Estado (agendado/adiado) ### Live Score Editor (`/games/:id/live`) ⭐ FUNCIONALIDADE CORE **Este é o ecrã mais importante do projeto.** #### Layout do ecrã: ``` ┌─────────────────────────────────────────────────┐ │ ● LIVE • Jornada 15 • [Pausar] [Terminar] │ ├─────────────────────────────────────────────────┤ │ │ │ FC PORTO 2 — 1 BENFICA │ │ (grande, Bebas Neue) │ │ │ │ [−] [+Golo] [+Outro] [+Golo] [+] │ │ │ ├─────────────────────────────────────────────────┤ │ EVENTOS DO JOGO [+ Evento] │ │ ┌────────────────────────────────────────────┐ │ │ │ ⚽ 23' — Mehdi Taremi (FC Porto) │ │ │ │ 🟨 31' — João Mário (Benfica) │ │ │ │ ⚽ 67' — Gonçalo Ramos (Benfica) │ │ │ │ ⚽ 71' — Evanilson (FC Porto) │ │ │ └────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────┘ ``` #### Funcionalidades: - **Cronómetro:** Inicia ao clicar "Iniciar Jogo", mostra minuto atual - **Botões de golo:** `+Golo` abre modal para selecionar jogador + minuto - **Outros eventos:** Cartão amarelo, cartão vermelho, substituição - **Desfazer:** Botão de undo no último evento (até 30 segundos) - **Intervalo:** Pausa o cronómetro, muda estado para "Intervalo" - **Terminar:** Confirma resultado final, fecha o jogo #### Modal de Golo: - Selecionar jogador (do clube que marcou, lista filtrada) - Minuto (pré-preenchido com minuto atual, editável) - Tipo: Golo normal / Penálti / Autogolo - Assistência (opcional, select com jogadores) - Botão "Confirmar Golo" → Firestore transaction #### Firestore Transaction no Golo: ``` 1. Adicionar evento ao subcollection games/:id/events 2. Incrementar game.score.home ou game.score.away 3. Incrementar player.stats.goals 4. Se assistência: incrementar player.stats.assists 5. Recalcular standings para ambos os clubes ``` --- ## Módulo 3: Clubes **Rota:** `/clubs` **Prioridade:** Média ### Lista de Clubes - Grid de cards com: escudo, nome, cidade, nº de jogadores - Barra de pesquisa - Botão "Novo Clube" ### Criar/Editar Clube **Campos:** - Nome do clube - Abreviatura (3 letras, ex: "FCP") - Cidade - Estádio - Cores (principal + secundária — color pickers) - Escudo (upload de imagem — Firebase Storage) - Ano de fundação ### Detalhe do Clube (`/clubs/:id`) - Info do clube - Lista de jogadores do clube (com link para edição) - Estatísticas: jogos, vitórias, empates, derrotas, golos --- ## Módulo 4: Jogadores **Rota:** `/players` **Prioridade:** Média ### Lista de Jogadores - Tabela com: foto, nome, clube (badge), posição, nº camisola, golos, assistências - Filtro por clube - Filtro por posição (GR, DEF, MED, ATA) - Barra de pesquisa - Botão "Novo Jogador" ### Criar/Editar Jogador **Campos:** - Nome completo - Nome curto (para scoreboards) - Data de nascimento - Nacionalidade - Clube (select) - Posição (GR / DEF / MED / ATA) - Número de camisola - Foto (upload — Firebase Storage) - Estado (ativo / lesionado / suspenso) --- ## Módulo 5: Classificação **Rota:** `/standings` **Prioridade:** Alta ### Tabela de Classificação - Posição, clube (escudo + nome), J, V, E, D, GM, GS, DG, Pts - Linha a separar lugares de Champions/Europa/Descida (configurável) - Atualização em tempo real - Possibilidade de **editar manualmente** (override) um valor (com confirmação) ### Recálculo Automático A classificação é recalculada automaticamente sempre que um jogo é finalizado. Pode também ser acionado manualmente por "Recalcular Classificação". --- ## Módulo 6: Artilheiros / Estatísticas **Rota:** `/scorers` **Prioridade:** Média ### Artilheiros - Posição, jogador (foto + nome), clube, golos, assistências - Filtro por tipo (golos / assistências / cartões) ### Cartões - Tabela de jogadores com mais cartões (amarelos e vermelhos) - Destaque para jogadores suspensos --- ## Módulo 7: Jornadas **Rota:** `/rounds` **Prioridade:** Média ### Gestão de Jornadas - Lista de jornadas (1 a N) - Criar nova jornada - Ver jogos de cada jornada - Marcar jornada como atual --- ## Funcionalidades Transversais ### Autenticação - Login com email/password (Firebase Auth) - Proteção de todas as rotas (exceto `/login`) - Sessão persistente - Logout ### Notificações (Toast) - Sucesso ao guardar dados - Erro com mensagem descritiva - Confirmação de ações destrutivas (modal de confirmação) ### Confirmação de Ações Destrutivas Sempre que o admin vai: - Apagar um jogo, clube ou jogador - Terminar um jogo - Fazer override na classificação → Aparece modal de confirmação com texto descritivo do que vai acontecer ### Auditoria (Nice to Have — v2) Guardar log de todas as alterações: quem fez, o quê, quando.