Files
VdcScoreLive/docs/05-features.md
2026-05-05 17:12:06 +01:00

6.8 KiB
Raw Permalink Blame History

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.