Merge branch 'development' into feature/6-statisticsview-erstellen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m25s
Pull Request Pipeline / lint (pull_request) Successful in 2m25s

# Conflicts:
#	lib/presentation/views/main_menu/statistics_view.dart
This commit is contained in:
2025-11-23 12:19:03 +01:00
5 changed files with 39 additions and 17 deletions

View File

@@ -88,13 +88,12 @@
]
},
"winner": {
"type": ["string","null"]
"type": ["object","null"]
},
"required": [
"id",
"createdAt",
"name",
"winner"
"name"
]
}
]

View File

@@ -20,13 +20,16 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
result.map((row) async {
final group = await db.groupGameDao.getGroupOfGame(gameId: row.id);
final players = await db.playerGameDao.getPlayersOfGame(gameId: row.id);
final winner = row.winnerId != null
? await db.playerDao.getPlayerById(playerId: row.winnerId!)
: null;
return Game(
id: row.id,
name: row.name,
group: group,
players: players,
createdAt: row.createdAt,
winner: row.winnerId,
winner: winner,
);
}),
);
@@ -45,13 +48,17 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
if (await db.groupGameDao.gameHasGroup(gameId: gameId)) {
group = await db.groupGameDao.getGroupOfGame(gameId: gameId);
}
Player? winner;
if (result.winnerId != null) {
winner = await db.playerDao.getPlayerById(playerId: result.winnerId!);
}
return Game(
id: result.id,
name: result.name,
players: players,
group: group,
winner: result.winnerId,
winner: winner,
createdAt: result.createdAt,
);
}
@@ -64,7 +71,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
GameTableCompanion.insert(
id: game.id,
name: game.name,
winnerId: Value(game.winner),
winnerId: Value(game.winner?.id),
createdAt: game.createdAt,
),
mode: InsertMode.insertOrReplace,
@@ -100,7 +107,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
id: game.id,
name: game.name,
createdAt: game.createdAt,
winnerId: Value(game.winner),
winnerId: Value(game.winner?.id),
),
)
.toList(),

View File

@@ -9,7 +9,7 @@ class Game {
final String name;
final List<Player>? players;
final Group? group;
final String? winner;
final Player? winner;
Game({
String? id,
@@ -17,7 +17,7 @@ class Game {
required this.name,
this.players,
this.group,
this.winner = '',
this.winner,
}) : id = id ?? const Uuid().v4(),
createdAt = createdAt ?? clock.now();
@@ -37,7 +37,7 @@ class Game {
.toList()
: null,
group = json['group'] != null ? Group.fromJson(json['group']) : null,
winner = json['winner'] ?? '';
winner = json['winner'] != null ? Player.fromJson(json['winner']) : null;
/// Converts the Game instance to a JSON object.
Map<String, dynamic> toJson() => {
@@ -46,6 +46,6 @@ class Game {
'name': name,
'players': players?.map((player) => player.toJson()).toList(),
'group': group?.toJson(),
'winner': winner,
'winner': winner?.toJson(),
};
}

View File

@@ -127,14 +127,14 @@ class _StatisticsViewState extends State<StatisticsView> {
// Getting the winners
for (var game in games) {
final winner = game.winner;
if (winner != null && winner.isNotEmpty) {
final index = winCounts.indexWhere((entry) => entry.$1 == winner);
if (winner != null) {
final index = winCounts.indexWhere((entry) => entry.$1 == winner.id);
// -1 means winner not found in winCounts
if (index != -1) {
final current = winCounts[index].$2;
winCounts[index] = (winner, current + 1);
winCounts[index] = (winner.id, current + 1);
} else {
winCounts.add((winner, 1));
winCounts.add((winner.id, 1));
}
}
}

View File

@@ -50,15 +50,18 @@ void main() {
name: 'First Test Game',
group: testGroup1,
players: [testPlayer4, testPlayer5],
winner: testPlayer4,
);
testGame2 = Game(
name: 'Second Test Game',
group: testGroup2,
players: [testPlayer1, testPlayer2, testPlayer3],
winner: testPlayer2,
);
testGameOnlyPlayers = Game(
name: 'Test Game with Players',
players: [testPlayer1, testPlayer2, testPlayer3],
winner: testPlayer3,
);
testGameOnlyGroup = Game(name: 'Test Game with Group', group: testGroup2);
});
@@ -75,9 +78,16 @@ void main() {
expect(result.id, testGame1.id);
expect(result.name, testGame1.name);
expect(result.winner, testGame1.winner);
expect(result.createdAt, testGame1.createdAt);
if (result.winner != null && testGame1.winner != null) {
expect(result.winner!.id, testGame1.winner!.id);
expect(result.winner!.name, testGame1.winner!.name);
expect(result.winner!.createdAt, testGame1.winner!.createdAt);
} else {
expect(result.winner, testGame1.winner);
}
if (result.group != null) {
expect(result.group!.members.length, testGroup1.members.length);
@@ -123,7 +133,13 @@ void main() {
expect(game.id, testGame.id);
expect(game.name, testGame.name);
expect(game.createdAt, testGame.createdAt);
expect(game.winner, testGame.winner);
if (game.winner != null && testGame.winner != null) {
expect(game.winner!.id, testGame.winner!.id);
expect(game.winner!.name, testGame.winner!.name);
expect(game.winner!.createdAt, testGame.winner!.createdAt);
} else {
expect(game.winner, testGame.winner);
}
// Group-Checks
if (testGame.group != null) {