@@ -12,12 +12,14 @@ typedef BroadcastsList = ({
1212 int ? nextPage,
1313});
1414
15+ enum BroadcastResult { whiteWins, blackWins, draw, ongoing, noResultPgnTag }
16+
1517@freezed
1618class Broadcast with _$Broadcast {
1719 const Broadcast ._();
1820
1921 const factory Broadcast ({
20- required BroadcastTournament tour,
22+ required BroadcastTournamentData tour,
2123 required BroadcastRound round,
2224 required String ? group,
2325
@@ -32,9 +34,42 @@ class Broadcast with _$Broadcast {
3234 String get title => group ?? tour.name;
3335}
3436
35- typedef BroadcastTournament = ({
37+ @freezed
38+ class BroadcastTournament with _$BroadcastTournament {
39+ const factory BroadcastTournament ({
40+ required BroadcastTournamentData data,
41+ required IList <BroadcastRound > rounds,
42+ required BroadcastRoundId defaultRoundId,
43+ required IList <BroadcastTournamentGroup >? group,
44+ }) = _BroadcastTournament ;
45+ }
46+
47+ @freezed
48+ class BroadcastTournamentData with _$BroadcastTournamentData {
49+ const factory BroadcastTournamentData ({
50+ required BroadcastTournamentId id,
51+ required String name,
52+ required String ? imageUrl,
53+ required String ? description,
54+ required BroadcastTournamentInformation information,
55+ }) = _BroadcastTournamentData ;
56+ }
57+
58+ typedef BroadcastTournamentInformation = ({
59+ String ? format,
60+ String ? timeControl,
61+ String ? players,
62+ BroadcastTournamentDates ? dates,
63+ });
64+
65+ typedef BroadcastTournamentDates = ({
66+ DateTime startsAt,
67+ DateTime ? endsAt,
68+ });
69+
70+ typedef BroadcastTournamentGroup = ({
71+ BroadcastTournamentId id,
3672 String name,
37- String ? imageUrl,
3873});
3974
4075@freezed
@@ -45,25 +80,31 @@ class BroadcastRound with _$BroadcastRound {
4580 required BroadcastRoundId id,
4681 required String name,
4782 required RoundStatus status,
48- required DateTime startsAt,
83+ required DateTime ? startsAt,
4984 }) = _BroadcastRound ;
5085}
5186
52- typedef BroadcastRoundGames = IMap <BroadcastGameId , BroadcastGameSnapshot >;
87+ typedef BroadcastRoundGames = IMap <BroadcastGameId , BroadcastGame >;
5388
5489@freezed
55- class BroadcastGameSnapshot with _$BroadcastGameSnapshot {
56- const BroadcastGameSnapshot ._();
90+ class BroadcastGame with _$BroadcastGame {
91+ const BroadcastGame ._();
5792
58- const factory BroadcastGameSnapshot ({
93+ const factory BroadcastGame ({
94+ required BroadcastGameId id,
5995 required IMap <Side , BroadcastPlayer > players,
6096 required String fen,
6197 required Move ? lastMove,
62- required String status,
63-
64- /// The amount of time that the player whose turn it is has been thinking since his last move
65- required Duration ? thinkTime,
66- }) = _BroadcastGameSnapshot ;
98+ required BroadcastResult status,
99+ required DateTime updatedClockAt,
100+ }) = _BroadcastGame ;
101+
102+ bool get isOngoing => status == BroadcastResult .ongoing;
103+ bool get isOver =>
104+ status == BroadcastResult .draw ||
105+ status == BroadcastResult .whiteWins ||
106+ status == BroadcastResult .blackWins;
107+ Side get sideToMove => Setup .parseFen (fen).turn;
67108}
68109
69110@freezed
0 commit comments