criação do website
This commit is contained in:
214
docs/05-features.md
Normal file
214
docs/05-features.md
Normal 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.
|
||||
Reference in New Issue
Block a user