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>
This commit is contained in:
2026-06-09 20:11:21 +02:00
parent 53f9a6a884
commit e727069d43
56 changed files with 1783 additions and 223 deletions

183
backend/config/sports.yml Normal file
View File

@@ -0,0 +1,183 @@
# Catalogo sport Match Live TV — board e overlay impliciti, regole standard.
# board: volley | basket | timed | racket | timer | generic
# overlay: none | timer | volley | basket | timed | racket
pallavolo:
label: Pallavolo
board: volley
overlay: volley
allowed_overlays: [volley, timer, none]
default_rules:
sets_to_win: 3
points_per_set: 25
points_deciding_set: 15
min_point_lead: 2
beach_volley:
label: Beach Volley
board: volley
overlay: volley
allowed_overlays: [volley, timer, none]
default_rules:
sets_to_win: 2
points_per_set: 21
points_deciding_set: 15
min_point_lead: 2
sitting_volley:
label: Sitting Volley
board: volley
overlay: volley
allowed_overlays: [volley, timer, none]
default_rules:
sets_to_win: 3
points_per_set: 25
points_deciding_set: 15
min_point_lead: 2
basket:
label: Basket
board: basket
overlay: basket
allowed_overlays: [basket, timer, none]
default_rules:
periods: 4
period_duration_secs: 600
overtime_duration_secs: 300
calcio_a_5:
label: Calcio a 5
board: timed
overlay: timed
allowed_overlays: [timed, timer, none]
default_rules:
periods: 2
period_duration_secs: 1200
overtime_duration_secs: 300
pallamano:
label: Pallamano
board: timed
overlay: timed
allowed_overlays: [timed, timer, none]
default_rules:
periods: 2
period_duration_secs: 1800
overtime_duration_secs: 300
hockey_indoor:
label: Hockey Indoor
board: timed
overlay: timed
allowed_overlays: [timed, timer, none]
default_rules:
periods: 2
period_duration_secs: 1200
overtime_duration_secs: 300
floorball:
label: Floorball
board: timed
overlay: timed
allowed_overlays: [timed, timer, none]
default_rules:
periods: 3
period_duration_secs: 1200
overtime_duration_secs: 300
tennis:
label: Tennis
board: racket
overlay: racket
allowed_overlays: [racket, timer, none]
default_rules:
sets_to_win: 2
points_per_set: 6
points_deciding_set: 7
min_point_lead: 2
tennis_tavolo:
label: Tennis Tavolo
board: racket
overlay: racket
allowed_overlays: [racket, timer, none]
default_rules:
sets_to_win: 3
points_per_set: 11
points_deciding_set: 11
min_point_lead: 2
badminton:
label: Badminton
board: racket
overlay: racket
allowed_overlays: [racket, timer, none]
default_rules:
sets_to_win: 2
points_per_set: 21
points_deciding_set: 21
min_point_lead: 2
padel:
label: Padel
board: racket
overlay: racket
allowed_overlays: [racket, timer, none]
default_rules:
sets_to_win: 2
points_per_set: 6
points_deciding_set: 7
min_point_lead: 2
pickleball:
label: Pickleball
board: racket
overlay: racket
allowed_overlays: [racket, timer, none]
default_rules:
sets_to_win: 2
points_per_set: 11
points_deciding_set: 11
min_point_lead: 2
ginnastica_artistica:
label: Ginnastica Artistica
board: timer
overlay: timer
allowed_overlays: [timer, none]
default_rules: {}
ginnastica_ritmica:
label: Ginnastica Ritmica
board: timer
overlay: timer
allowed_overlays: [timer, none]
default_rules: {}
danza_sportiva:
label: Danza Sportiva
board: timer
overlay: timer
allowed_overlays: [timer, none]
default_rules: {}
cheerleading:
label: Cheerleading
board: timer
overlay: timer
allowed_overlays: [timer, none]
default_rules: {}
pattinaggio:
label: Pattinaggio
board: timer
overlay: timer
allowed_overlays: [timer, none]
default_rules: {}
altro:
label: Altro
board: generic
overlay: none
allowed_overlays: [none, timer]
default_rules: {}