diff --git a/lib/data/dto/match.dart b/lib/data/dto/match.dart index 3976d36..4874186 100644 --- a/lib/data/dto/match.dart +++ b/lib/data/dto/match.dart @@ -3,6 +3,7 @@ import 'package:tallee/core/enums.dart'; import 'package:tallee/data/dto/game.dart'; import 'package:tallee/data/dto/group.dart'; import 'package:tallee/data/dto/player.dart'; +import 'package:tallee/data/dto/score_entry.dart'; import 'package:uuid/uuid.dart'; class Match { @@ -14,6 +15,7 @@ class Match { final Group? group; final List players; final String notes; + List scores; Player? winner; Match({ @@ -24,28 +26,42 @@ class Match { required this.game, this.group, this.players = const [], - String? notes, + this.notes = '', + this.scores = const [], this.winner, }) : id = id ?? const Uuid().v4(), - createdAt = createdAt ?? clock.now(), - notes = notes ?? ''; + createdAt = createdAt ?? clock.now(); @override String toString() { - return 'Match{id: $id, name: $name, game: $game, group: $group, players: $players, notes: $notes, endedAt: $endedAt}'; + return 'Match{id: $id, createdAt: $createdAt, endedAt: $endedAt, ' + 'name: $name, game: $game, group: $group, players: $players, ' + 'notes: $notes, scores: $scores, winner: $winner}'; } /// Creates a Match instance from a JSON object (ID references format). /// Related objects are reconstructed from IDs by the DataTransferService. Match.fromJson(Map json) - : id = json['id'], - createdAt = DateTime.parse(json['createdAt']), - endedAt = json['endedAt'] != null ? DateTime.parse(json['endedAt']) : null, - name = json['name'], - game = Game(name: '', ruleset: Ruleset.singleWinner, description: '', color: GameColor.blue, icon: ''), // Populated during import via DataTransferService - group = null, // Populated during import via DataTransferService - players = [], // Populated during import via DataTransferService - notes = json['notes'] ?? ''; + : id = json['id'], + createdAt = DateTime.parse(json['createdAt']), + endedAt = json['endedAt'] != null + ? DateTime.parse(json['endedAt']) + : null, + name = json['name'], + game = Game( + name: '', + ruleset: Ruleset.singleWinner, + description: '', + color: GameColor.blue, + icon: '', + ), + // Populated during import via DataTransferService + group = null, + // Populated during import via DataTransferService + players = [], + // Populated during import via DataTransferService + scores = json['scores'], + notes = json['notes'] ?? ''; /// Converts the Match instance to a JSON object using normalized format (ID references only). Map toJson() => { @@ -56,6 +72,7 @@ class Match { 'gameId': game.id, 'groupId': group?.id, 'playerIds': players.map((player) => player.id).toList(), + 'scores': scores.map((score) => score.toJson()).toList(), 'notes': notes, }; } diff --git a/lib/data/dto/score_entry.dart b/lib/data/dto/score_entry.dart new file mode 100644 index 0000000..9e6b8a9 --- /dev/null +++ b/lib/data/dto/score_entry.dart @@ -0,0 +1,30 @@ +class ScoreEntry { + final String playerId; + final String matchId; + final int roundNumber; + int score = 0; + int change = 0; + + ScoreEntry({ + required this.playerId, + required this.matchId, + required this.roundNumber, + required this.score, + required this.change, + }); + + ScoreEntry.fromJson(Map json) + : playerId = json['playerId'], + matchId = json['matchId'], + roundNumber = json['roundNumber'], + score = json['score'], + change = json['change']; + + Map toJson() => { + 'playerId': playerId, + 'matchId': matchId, + 'roundNumber': roundNumber, + 'score': score, + 'change': change, + }; +}