criação do website

This commit is contained in:
2026-05-05 17:12:06 +01:00
parent 9c36b714f1
commit 732e7276b7
46 changed files with 9844 additions and 0 deletions

214
docs/05-features.md Normal file
View File

@@ -0,0 +1,214 @@
# 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.