Initial commit: monorepo Match Live TV.

Rails API, app Flutter, infrastruttura Docker/MediaMTX, sito marketing e documentazione di deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-26 17:45:37 +02:00
commit bba6df52c0
381 changed files with 20599 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
class SetPartial {
const SetPartial({
required this.set,
required this.home,
required this.away,
});
final int set;
final int home;
final int away;
factory SetPartial.fromJson(Map<String, dynamic> json) {
return SetPartial(
set: json['set'] as int? ?? 1,
home: json['home'] as int? ?? 0,
away: json['away'] as int? ?? 0,
);
}
Map<String, dynamic> toJson() => {
'set': set,
'home': home,
'away': away,
};
}
class ScoreState {
const ScoreState({
this.homeSets = 0,
this.awaySets = 0,
this.homePoints = 0,
this.awayPoints = 0,
this.currentSet = 1,
this.setPartials = const [],
this.timeoutHome = false,
this.timeoutAway = false,
});
final int homeSets;
final int awaySets;
final int homePoints;
final int awayPoints;
final int currentSet;
final List<SetPartial> setPartials;
final bool timeoutHome;
final bool timeoutAway;
factory ScoreState.fromJson(Map<String, dynamic> json) {
final rawPartials = json['set_partials'];
final partials = rawPartials is List
? rawPartials
.whereType<Map>()
.map((e) => SetPartial.fromJson(Map<String, dynamic>.from(e)))
.toList()
: <SetPartial>[];
return ScoreState(
homeSets: json['home_sets'] as int? ?? 0,
awaySets: json['away_sets'] as int? ?? 0,
homePoints: json['home_points'] as int? ?? 0,
awayPoints: json['away_points'] as int? ?? 0,
currentSet: json['current_set'] as int? ?? 1,
setPartials: partials,
timeoutHome: json['timeout_home'] as bool? ?? false,
timeoutAway: json['timeout_away'] as bool? ?? false,
);
}
Map<String, dynamic> toCablePayload() => {
'type': 'score_update',
'home_sets': homeSets,
'away_sets': awaySets,
'home_points': homePoints,
'away_points': awayPoints,
'current_set': currentSet,
'set_partials': setPartials.map((p) => p.toJson()).toList(),
};
ScoreState copyWith({
int? homeSets,
int? awaySets,
int? homePoints,
int? awayPoints,
int? currentSet,
List<SetPartial>? setPartials,
bool? timeoutHome,
bool? timeoutAway,
}) {
return ScoreState(
homeSets: homeSets ?? this.homeSets,
awaySets: awaySets ?? this.awaySets,
homePoints: homePoints ?? this.homePoints,
awayPoints: awayPoints ?? this.awayPoints,
currentSet: currentSet ?? this.currentSet,
setPartials: setPartials ?? this.setPartials,
timeoutHome: timeoutHome ?? this.timeoutHome,
timeoutAway: timeoutAway ?? this.timeoutAway,
);
}
}