Files
MatchLiveTv/docs/MULTI_SPORT.md
Emiliano Frascaro e727069d43 Introduce architettura multi-sport con catalogo, engine scoring e overlay.
Catalogo sport in YAML, board implicito, engine per volley/basket/timed/racket/timer/generic, regia e app Android allineate.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 20:11:21 +02:00

50 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Multi-sport — Match Live TV
## Concetti
| Concetto | Descrizione |
|----------|-------------|
| `sport_key` | Disciplina (pallavolo, basket, tennis…) — sulla squadra e snapshot sulla partita |
| `board_type` | Macro-tabellone **implicito** dal catalogo (`volley`, `basket`, `timed`, `racket`, `timer`, `generic`) |
| `overlay_kind` | Layout video sulla partita (`none`, `timer`, `volley`, `basket`, `timed`, `racket`) |
| `scoring_rules` | Regole effettive della partita (override sui default del catalogo) |
## Catalogo
Definito in [`backend/config/sports.yml`](../backend/config/sports.yml), caricato da `Sports::Catalog`.
- Nessuna tabella `sports` in DB
- API: `GET /api/v1/sports`
## Scoring
`Scoring::Engine.for(match)` seleziona l'engine:
| Board | Engine | Azioni principali |
|-------|--------|-------------------|
| volley | VolleyEngine | +1, 1, chiudi set |
| racket | RacketEngine | come volley (fase 1) |
| generic | GenericEngine | +1, 1 (nessuna chiusura set) |
| basket | BasketEngine | +1/+2/+3, quarti, cronometro |
| timed | TimedEngine | +1, 1, tempi, cronometro |
| timer | TimerEngine | solo cronometro |
`score_states.data` (JSONB) per basket/timed/timer.
## Overlay
Scelto per partita (`overlay_kind`), limitato da `allowed_overlays` dello sport.
Rendering Android: `OverlayKind` in `OverlayState``ScoreboardElement`, `CompactScoreboardElement`, `TimerElement`.
## Migrazione
- `teams.sport``sport_key` (`volleyball``pallavolo`)
- `matches.sport``sport_key`
- `matches.overlay_kind` (nullable)
- `score_states.board_type`, `score_states.data`
## Regia web
Partial per board in `app/views/public/regia/_*.html.erb`, `data-board` su `#regia-app`.