StatisticsView erstellen #30
@@ -88,13 +88,12 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"winner": {
|
"winner": {
|
||||||
"type": ["string","null"]
|
"type": ["object","null"]
|
||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
"id",
|
"id",
|
||||||
"createdAt",
|
"createdAt",
|
||||||
"name",
|
"name"
|
||||||
"winner"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -20,13 +20,16 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
|
|||||||
result.map((row) async {
|
result.map((row) async {
|
||||||
final group = await db.groupGameDao.getGroupOfGame(gameId: row.id);
|
final group = await db.groupGameDao.getGroupOfGame(gameId: row.id);
|
||||||
final players = await db.playerGameDao.getPlayersOfGame(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(
|
return Game(
|
||||||
id: row.id,
|
id: row.id,
|
||||||
name: row.name,
|
name: row.name,
|
||||||
group: group,
|
group: group,
|
||||||
players: players,
|
players: players,
|
||||||
createdAt: row.createdAt,
|
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)) {
|
if (await db.groupGameDao.gameHasGroup(gameId: gameId)) {
|
||||||
group = await db.groupGameDao.getGroupOfGame(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(
|
return Game(
|
||||||
id: result.id,
|
id: result.id,
|
||||||
name: result.name,
|
name: result.name,
|
||||||
players: players,
|
players: players,
|
||||||
group: group,
|
group: group,
|
||||||
winner: result.winnerId,
|
winner: winner,
|
||||||
createdAt: result.createdAt,
|
createdAt: result.createdAt,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -64,7 +71,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
|
|||||||
GameTableCompanion.insert(
|
GameTableCompanion.insert(
|
||||||
id: game.id,
|
id: game.id,
|
||||||
name: game.name,
|
name: game.name,
|
||||||
winnerId: Value(game.winner),
|
winnerId: Value(game.winner?.id),
|
||||||
createdAt: game.createdAt,
|
createdAt: game.createdAt,
|
||||||
),
|
),
|
||||||
mode: InsertMode.insertOrReplace,
|
mode: InsertMode.insertOrReplace,
|
||||||
@@ -100,7 +107,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
|
|||||||
id: game.id,
|
id: game.id,
|
||||||
name: game.name,
|
name: game.name,
|
||||||
createdAt: game.createdAt,
|
createdAt: game.createdAt,
|
||||||
winnerId: Value(game.winner),
|
winnerId: Value(game.winner?.id),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.toList(),
|
.toList(),
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class Game {
|
|||||||
final String name;
|
final String name;
|
||||||
final List<Player>? players;
|
final List<Player>? players;
|
||||||
final Group? group;
|
final Group? group;
|
||||||
final String? winner;
|
final Player? winner;
|
||||||
|
|
||||||
Game({
|
Game({
|
||||||
String? id,
|
String? id,
|
||||||
@@ -17,7 +17,7 @@ class Game {
|
|||||||
required this.name,
|
required this.name,
|
||||||
this.players,
|
this.players,
|
||||||
this.group,
|
this.group,
|
||||||
this.winner = '',
|
this.winner,
|
||||||
}) : id = id ?? const Uuid().v4(),
|
}) : id = id ?? const Uuid().v4(),
|
||||||
createdAt = createdAt ?? clock.now();
|
createdAt = createdAt ?? clock.now();
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ class Game {
|
|||||||
.toList()
|
.toList()
|
||||||
: null,
|
: null,
|
||||||
group = json['group'] != null ? Group.fromJson(json['group']) : 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.
|
/// Converts the Game instance to a JSON object.
|
||||||
Map<String, dynamic> toJson() => {
|
Map<String, dynamic> toJson() => {
|
||||||
@@ -46,6 +46,6 @@ class Game {
|
|||||||
'name': name,
|
'name': name,
|
||||||
'players': players?.map((player) => player.toJson()).toList(),
|
'players': players?.map((player) => player.toJson()).toList(),
|
||||||
'group': group?.toJson(),
|
'group': group?.toJson(),
|
||||||
'winner': winner,
|
'winner': winner?.toJson(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,14 +127,14 @@ class _StatisticsViewState extends State<StatisticsView> {
|
|||||||
// Getting the winners
|
// Getting the winners
|
||||||
for (var game in games) {
|
for (var game in games) {
|
||||||
final winner = game.winner;
|
final winner = game.winner;
|
||||||
if (winner != null && winner.isNotEmpty) {
|
if (winner != null) {
|
||||||
final index = winCounts.indexWhere((entry) => entry.$1 == winner);
|
final index = winCounts.indexWhere((entry) => entry.$1 == winner.id);
|
||||||
// -1 means winner not found in winCounts
|
// -1 means winner not found in winCounts
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
final current = winCounts[index].$2;
|
final current = winCounts[index].$2;
|
||||||
winCounts[index] = (winner, current + 1);
|
winCounts[index] = (winner.id, current + 1);
|
||||||
} else {
|
} else {
|
||||||
winCounts.add((winner, 1));
|
winCounts.add((winner.id, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,15 +50,18 @@ void main() {
|
|||||||
name: 'First Test Game',
|
name: 'First Test Game',
|
||||||
group: testGroup1,
|
group: testGroup1,
|
||||||
players: [testPlayer4, testPlayer5],
|
players: [testPlayer4, testPlayer5],
|
||||||
|
winner: testPlayer4,
|
||||||
);
|
);
|
||||||
testGame2 = Game(
|
testGame2 = Game(
|
||||||
name: 'Second Test Game',
|
name: 'Second Test Game',
|
||||||
group: testGroup2,
|
group: testGroup2,
|
||||||
players: [testPlayer1, testPlayer2, testPlayer3],
|
players: [testPlayer1, testPlayer2, testPlayer3],
|
||||||
|
winner: testPlayer2,
|
||||||
);
|
);
|
||||||
testGameOnlyPlayers = Game(
|
testGameOnlyPlayers = Game(
|
||||||
name: 'Test Game with Players',
|
name: 'Test Game with Players',
|
||||||
players: [testPlayer1, testPlayer2, testPlayer3],
|
players: [testPlayer1, testPlayer2, testPlayer3],
|
||||||
|
winner: testPlayer3,
|
||||||
);
|
);
|
||||||
testGameOnlyGroup = Game(name: 'Test Game with Group', group: testGroup2);
|
testGameOnlyGroup = Game(name: 'Test Game with Group', group: testGroup2);
|
||||||
});
|
});
|
||||||
@@ -75,9 +78,16 @@ void main() {
|
|||||||
|
|
||||||
expect(result.id, testGame1.id);
|
expect(result.id, testGame1.id);
|
||||||
expect(result.name, testGame1.name);
|
expect(result.name, testGame1.name);
|
||||||
expect(result.winner, testGame1.winner);
|
|
||||||
expect(result.createdAt, testGame1.createdAt);
|
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) {
|
if (result.group != null) {
|
||||||
expect(result.group!.members.length, testGroup1.members.length);
|
expect(result.group!.members.length, testGroup1.members.length);
|
||||||
|
|
||||||
@@ -123,7 +133,13 @@ void main() {
|
|||||||
expect(game.id, testGame.id);
|
expect(game.id, testGame.id);
|
||||||
expect(game.name, testGame.name);
|
expect(game.name, testGame.name);
|
||||||
expect(game.createdAt, testGame.createdAt);
|
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
|
// Group-Checks
|
||||||
if (testGame.group != null) {
|
if (testGame.group != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user