6.8 KiB
6.8 KiB
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:
+Goloabre 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.