diff --git a/lib/data/dao/game_dao.dart b/lib/data/dao/game_dao.dart index 94d010c..20c90c7 100644 --- a/lib/data/dao/game_dao.dart +++ b/lib/data/dao/game_dao.dart @@ -15,11 +15,23 @@ class GameDao extends DatabaseAccessor with _$GameDaoMixin { Future> getAllGames() async { final query = select(gameTable); final result = await query.get(); - return result - .map( - (row) => Game(id: row.id, name: row.name, createdAt: row.createdAt), - ) - .toList(); + + return Future.wait( + result.map((row) async { + final group = await db.groupGameDao.getGroupByGameId(gameId: row.id); + final player = await db.playerGameDao.getPlayersByGameId( + gameId: row.id, + ); + return Game( + id: row.id, + name: row.name, + group: group, + players: player, + createdAt: row.createdAt, + winner: row.winnerId, + ); + }), + ); } /// Retrieves a [Game] by its [gameId]. diff --git a/lib/data/dao/group_game_dao.dart b/lib/data/dao/group_game_dao.dart index d3b30ca..66ebdec 100644 --- a/lib/data/dao/group_game_dao.dart +++ b/lib/data/dao/group_game_dao.dart @@ -23,10 +23,15 @@ class GroupGameDao extends DatabaseAccessor } /// Retrieves the [Group] associated with the given [gameId]. - Future getGroupByGameId({required String gameId}) async { + /// Returns `null` if no group is found. + Future getGroupByGameId({required String gameId}) async { final result = await (select( groupGameTable, - )..where((g) => g.gameId.equals(gameId))).getSingle(); + )..where((g) => g.gameId.equals(gameId))).getSingleOrNull(); + + if (result == null) { + return null; + } final group = await db.groupDao.getGroupById(groupId: result.groupId); return group; diff --git a/lib/data/dao/player_game_dao.dart b/lib/data/dao/player_game_dao.dart index 8f367f8..05c9e10 100644 --- a/lib/data/dao/player_game_dao.dart +++ b/lib/data/dao/player_game_dao.dart @@ -23,19 +23,19 @@ class PlayerGameDao extends DatabaseAccessor } /// Retrieves a list of [Player]s associated with the given [gameId]. - /// Returns an empty list if no players are found. - Future> getPlayersByGameId({required String gameId}) async { + /// Returns null if no players are found. + Future?> getPlayersByGameId({required String gameId}) async { final result = await (select( playerGameTable, )..where((p) => p.gameId.equals(gameId))).get(); - if (result.isEmpty) return []; + if (result.isEmpty) return null; final futures = result.map( (row) => db.playerDao.getPlayerById(playerId: row.playerId), ); final players = await Future.wait(futures); - return players.whereType().toList(); + return players; } /// Associates a player with a game by inserting a record into the