Refactoring

This commit is contained in:
2026-05-24 23:27:14 +02:00
parent 428f967010
commit bccd47e20e
10 changed files with 171 additions and 163 deletions

View File

@@ -77,8 +77,8 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
/// Returns `true` if the game exists, `false` otherwise. /// Returns `true` if the game exists, `false` otherwise.
Future<bool> gameExists({required String gameId}) async { Future<bool> gameExists({required String gameId}) async {
final query = select(gameTable)..where((g) => g.id.equals(gameId)); final query = select(gameTable)..where((g) => g.id.equals(gameId));
final result = await query.getSingleOrNull(); final row = await query.getSingleOrNull();
return result != null; return row != null;
} }
/// Retrieves all games from the database. /// Retrieves all games from the database.
@@ -103,15 +103,15 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
/// Retrieves a [Game] by its [gameId]. /// Retrieves a [Game] by its [gameId].
Future<Game> getGameById({required String gameId}) async { Future<Game> getGameById({required String gameId}) async {
final query = select(gameTable)..where((g) => g.id.equals(gameId)); final query = select(gameTable)..where((g) => g.id.equals(gameId));
final result = await query.getSingle(); final row = await query.getSingle();
return Game( return Game(
id: result.id, id: row.id,
name: result.name, name: row.name,
ruleset: Ruleset.values.firstWhere((e) => e.name == result.ruleset), ruleset: Ruleset.values.firstWhere((e) => e.name == row.ruleset),
description: result.description, description: row.description,
color: AppColor.values.firstWhere((e) => e.name == result.color), color: AppColor.values.firstWhere((e) => e.name == row.color),
icon: result.icon, icon: row.icon,
createdAt: result.createdAt, createdAt: row.createdAt,
); );
} }
@@ -123,7 +123,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
required String name, required String name,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(gameTable)..where((g) => g.id.equals(gameId))).write( await (update(gameTable)..where((tbl) => tbl.id.equals(gameId))).write(
GameTableCompanion(name: Value(name)), GameTableCompanion(name: Value(name)),
); );
return rowsAffected > 0; return rowsAffected > 0;
@@ -135,7 +135,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
required Ruleset ruleset, required Ruleset ruleset,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(gameTable)..where((g) => g.id.equals(gameId))).write( await (update(gameTable)..where((tbl) => tbl.id.equals(gameId))).write(
GameTableCompanion(ruleset: Value(ruleset.name)), GameTableCompanion(ruleset: Value(ruleset.name)),
); );
return rowsAffected > 0; return rowsAffected > 0;
@@ -147,7 +147,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
required String description, required String description,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(gameTable)..where((g) => g.id.equals(gameId))).write( await (update(gameTable)..where((tbl) => tbl.id.equals(gameId))).write(
GameTableCompanion(description: Value(description)), GameTableCompanion(description: Value(description)),
); );
return rowsAffected > 0; return rowsAffected > 0;
@@ -159,7 +159,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
required AppColor color, required AppColor color,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(gameTable)..where((g) => g.id.equals(gameId))).write( await (update(gameTable)..where((tbl) => tbl.id.equals(gameId))).write(
GameTableCompanion(color: Value(color.name)), GameTableCompanion(color: Value(color.name)),
); );
return rowsAffected > 0; return rowsAffected > 0;
@@ -171,7 +171,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
required String icon, required String icon,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(gameTable)..where((g) => g.id.equals(gameId))).write( await (update(gameTable)..where((tbl) => tbl.id.equals(gameId))).write(
GameTableCompanion(icon: Value(icon)), GameTableCompanion(icon: Value(icon)),
); );
return rowsAffected > 0; return rowsAffected > 0;
@@ -182,7 +182,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
/// Deletes the game with the given [gameId] from the database. /// Deletes the game with the given [gameId] from the database.
/// Returns `true` if the game was deleted, `false` if the game did not exist. /// Returns `true` if the game was deleted, `false` if the game did not exist.
Future<bool> deleteGame({required String gameId}) async { Future<bool> deleteGame({required String gameId}) async {
final query = delete(gameTable)..where((g) => g.id.equals(gameId)); final query = delete(gameTable)..where((tbl) => tbl.id.equals(gameId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }

View File

@@ -143,16 +143,16 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
final query = select(groupTable); final query = select(groupTable);
final result = await query.get(); final result = await query.get();
return Future.wait( return Future.wait(
result.map((groupData) async { result.map((row) async {
final members = await db.playerGroupDao.getPlayersOfGroup( final members = await db.playerGroupDao.getPlayersOfGroup(
groupId: groupData.id, groupId: row.id,
); );
return Group( return Group(
id: groupData.id, id: row.id,
name: groupData.name, name: row.name,
description: groupData.description, description: row.description,
members: members, members: members,
createdAt: groupData.createdAt, createdAt: row.createdAt,
); );
}), }),
); );
@@ -161,18 +161,18 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
/// Retrieves a [Group] by its [groupId], including its members. /// Retrieves a [Group] by its [groupId], including its members.
Future<Group> getGroupById({required String groupId}) async { Future<Group> getGroupById({required String groupId}) async {
final query = select(groupTable)..where((g) => g.id.equals(groupId)); final query = select(groupTable)..where((g) => g.id.equals(groupId));
final result = await query.getSingle(); final row = await query.getSingle();
List<Player> members = await db.playerGroupDao.getPlayersOfGroup( List<Player> members = await db.playerGroupDao.getPlayersOfGroup(
groupId: groupId, groupId: groupId,
); );
return Group( return Group(
id: result.id, id: row.id,
name: result.name, name: row.name,
description: result.description, description: row.description,
members: members, members: members,
createdAt: result.createdAt, createdAt: row.createdAt,
); );
} }
@@ -180,7 +180,7 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
Future<int> getGroupCount() async { Future<int> getGroupCount() async {
final count = final count =
await (selectOnly(groupTable)..addColumns([groupTable.id.count()])) await (selectOnly(groupTable)..addColumns([groupTable.id.count()]))
.map((row) => row.read(groupTable.id.count())) .map((tbl) => tbl.read(groupTable.id.count()))
.getSingle(); .getSingle();
return count ?? 0; return count ?? 0;
} }
@@ -190,28 +190,28 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
Future<List<Group>> getGroupsByPlayer({required String playerId}) async { Future<List<Group>> getGroupsByPlayer({required String playerId}) async {
final playerGroups = await (select( final playerGroups = await (select(
playerGroupTable, playerGroupTable,
)..where((pg) => pg.playerId.equals(playerId))).get(); )..where((tbl) => tbl.playerId.equals(playerId))).get();
if (playerGroups.isEmpty) return []; if (playerGroups.isEmpty) return [];
final groupIds = playerGroups.map((pg) => pg.groupId).toSet().toList(); final groupIds = playerGroups.map((pg) => pg.groupId).toSet().toList();
final rows = final result =
await (select(groupTable) await (select(groupTable)
..where((g) => g.id.isIn(groupIds)) ..where((tbl) => tbl.id.isIn(groupIds))
..orderBy([(g) => OrderingTerm.desc(g.createdAt)])) ..orderBy([(tbl) => OrderingTerm.desc(tbl.createdAt)]))
.get(); .get();
return Future.wait( return Future.wait(
rows.map((groupData) async { result.map((row) async {
final members = await db.playerGroupDao.getPlayersOfGroup( final members = await db.playerGroupDao.getPlayersOfGroup(
groupId: groupData.id, groupId: row.id,
); );
return Group( return Group(
id: groupData.id, id: row.id,
name: groupData.name, name: row.name,
description: groupData.description, description: row.description,
members: members, members: members,
createdAt: groupData.createdAt, createdAt: row.createdAt,
); );
}), }),
); );
@@ -221,8 +221,8 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
/// Returns `true` if the group exists, `false` otherwise. /// Returns `true` if the group exists, `false` otherwise.
Future<bool> groupExists({required String groupId}) async { Future<bool> groupExists({required String groupId}) async {
final query = select(groupTable)..where((g) => g.id.equals(groupId)); final query = select(groupTable)..where((g) => g.id.equals(groupId));
final result = await query.getSingleOrNull(); final row = await query.getSingleOrNull();
return result != null; return row != null;
} }
/* Delete */ /* Delete */
@@ -252,9 +252,8 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
required String name, required String name,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(groupTable)..where((g) => g.id.equals(groupId))).write( await (update(groupTable)..where((tbl) => tbl.id.equals(groupId)))
GroupTableCompanion(name: Value(name)), .write(GroupTableCompanion(name: Value(name)));
);
return rowsAffected > 0; return rowsAffected > 0;
} }
@@ -265,9 +264,8 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
required String description, required String description,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(groupTable)..where((g) => g.id.equals(groupId))).write( await (update(groupTable)..where((tbl) => tbl.id.equals(groupId)))
GroupTableCompanion(description: Value(description)), .write(GroupTableCompanion(description: Value(description)));
);
return rowsAffected > 0; return rowsAffected > 0;
} }
} }

View File

@@ -258,15 +258,15 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
/// Returns `true` if the match exists, otherwise `false`. /// Returns `true` if the match exists, otherwise `false`.
Future<bool> matchExists({required String matchId}) async { Future<bool> matchExists({required String matchId}) async {
final query = select(matchTable)..where((g) => g.id.equals(matchId)); final query = select(matchTable)..where((g) => g.id.equals(matchId));
final result = await query.getSingleOrNull(); final row = await query.getSingleOrNull();
return result != null; return row != null;
} }
/// Retrieves the number of matches in the database. /// Retrieves the number of matches in the database.
Future<int> getMatchCount() async { Future<int> getMatchCount() async {
final count = final count =
await (selectOnly(matchTable)..addColumns([matchTable.id.count()])) await (selectOnly(matchTable)..addColumns([matchTable.id.count()]))
.map((row) => row.read(matchTable.id.count())) .map((tbl) => tbl.read(matchTable.id.count()))
.getSingle(); .getSingle();
return count ?? 0; return count ?? 0;
} }
@@ -279,10 +279,12 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
return Future.wait( return Future.wait(
result.map((row) async { result.map((row) async {
final game = await db.gameDao.getGameById(gameId: row.gameId); final game = await db.gameDao.getGameById(gameId: row.gameId);
Group? group; Group? group;
if (row.groupId != null) { if (row.groupId != null) {
group = await db.groupDao.getGroupById(groupId: row.groupId!); group = await db.groupDao.getGroupById(groupId: row.groupId!);
} }
final players = await db.playerMatchDao.getPlayersOfMatch( final players = await db.playerMatchDao.getPlayersOfMatch(
matchId: row.id, matchId: row.id,
); );
@@ -312,13 +314,13 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
/// Retrieves a [Match] by its [matchId]. /// Retrieves a [Match] by its [matchId].
Future<Match> getMatchById({required String matchId}) async { Future<Match> getMatchById({required String matchId}) async {
final query = select(matchTable)..where((g) => g.id.equals(matchId)); final query = select(matchTable)..where((g) => g.id.equals(matchId));
final result = await query.getSingle(); final row = await query.getSingle();
final game = await db.gameDao.getGameById(gameId: result.gameId); final game = await db.gameDao.getGameById(gameId: row.gameId);
Group? group; Group? group;
if (result.groupId != null) { if (row.groupId != null) {
group = await db.groupDao.getGroupById(groupId: result.groupId!); group = await db.groupDao.getGroupById(groupId: row.groupId!);
} }
final players = await db.playerMatchDao.getPlayersOfMatch(matchId: matchId); final players = await db.playerMatchDao.getPlayersOfMatch(matchId: matchId);
@@ -328,15 +330,15 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
final teams = await _getMatchTeams(matchId: matchId); final teams = await _getMatchTeams(matchId: matchId);
return Match( return Match(
id: result.id, id: row.id,
name: result.name, name: row.name,
game: game, game: game,
group: group, group: group,
players: players, players: players,
teams: teams.isEmpty ? null : teams, teams: teams.isEmpty ? null : teams,
notes: result.notes, notes: row.notes,
createdAt: result.createdAt, createdAt: row.createdAt,
endedAt: result.endedAt, endedAt: row.endedAt,
scores: scores, scores: scores,
); );
} }
@@ -347,7 +349,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
await (selectOnly(matchTable) await (selectOnly(matchTable)
..where(matchTable.gameId.equals(gameId)) ..where(matchTable.gameId.equals(gameId))
..addColumns([matchTable.id.count()])) ..addColumns([matchTable.id.count()]))
.map((row) => row.read(matchTable.id.count())) .map((tbl) => tbl.read(matchTable.id.count()))
.getSingle(); .getSingle();
return count ?? 0; return count ?? 0;
} }
@@ -355,19 +357,19 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
Future<List<Match>> getMatchesByPlayer({required String playerId}) async { Future<List<Match>> getMatchesByPlayer({required String playerId}) async {
final playerMatches = await (select( final playerMatches = await (select(
playerMatchTable, playerMatchTable,
)..where((pm) => pm.playerId.equals(playerId))).get(); )..where((tbl) => tbl.playerId.equals(playerId))).get();
if (playerMatches.isEmpty) return []; if (playerMatches.isEmpty) return [];
final matchIds = playerMatches.map((pm) => pm.matchId).toSet().toList(); final matchIds = playerMatches.map((tbl) => tbl.matchId).toSet().toList();
final rows = final result =
await (select(matchTable) await (select(matchTable)
..where((m) => m.id.isIn(matchIds)) ..where((tbl) => tbl.id.isIn(matchIds))
..orderBy([(m) => OrderingTerm.desc(m.createdAt)])) ..orderBy([(tbl) => OrderingTerm.desc(tbl.createdAt)]))
.get(); .get();
return Future.wait( return Future.wait(
rows.map((row) async { result.map((row) async {
final game = await db.gameDao.getGameById(gameId: row.gameId); final game = await db.gameDao.getGameById(gameId: row.gameId);
Group? group; Group? group;
@@ -403,16 +405,17 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
/// Queries the database directly, filtering by [groupId]. /// Queries the database directly, filtering by [groupId].
Future<List<Match>> getMatchesByGroup({required String groupId}) async { Future<List<Match>> getMatchesByGroup({required String groupId}) async {
final query = select(matchTable)..where((m) => m.groupId.equals(groupId)); final query = select(matchTable)..where((m) => m.groupId.equals(groupId));
final rows = await query.get(); final result = await query.get();
return Future.wait( return Future.wait(
rows.map((row) async { result.map((row) async {
final game = await db.gameDao.getGameById(gameId: row.gameId); final game = await db.gameDao.getGameById(gameId: row.gameId);
final group = await db.groupDao.getGroupById(groupId: groupId); final group = await db.groupDao.getGroupById(groupId: groupId);
final players = await db.playerMatchDao.getPlayersOfMatch( final players = await db.playerMatchDao.getPlayersOfMatch(
matchId: row.id, matchId: row.id,
); );
final teams = await _getMatchTeams(matchId: row.id); final teams = await _getMatchTeams(matchId: row.id);
return Match( return Match(
id: row.id, id: row.id,
name: row.name, name: row.name,
@@ -432,7 +435,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
Future<List<Team>> _getMatchTeams({required String matchId}) async { Future<List<Team>> _getMatchTeams({required String matchId}) async {
// Get all unique team IDs from PlayerMatchTable for this match // Get all unique team IDs from PlayerMatchTable for this match
final playerMatchQuery = select(db.playerMatchTable) final playerMatchQuery = select(db.playerMatchTable)
..where((pm) => pm.matchId.equals(matchId) & pm.teamId.isNotNull()); ..where((tbl) => tbl.matchId.equals(matchId) & tbl.teamId.isNotNull());
final playerMatches = await playerMatchQuery.get(); final playerMatches = await playerMatchQuery.get();
if (playerMatches.isEmpty) return []; if (playerMatches.isEmpty) return [];
@@ -459,7 +462,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
required String matchId, required String matchId,
required String name, required String name,
}) async { }) async {
final query = update(matchTable)..where((g) => g.id.equals(matchId)); final query = update(matchTable)..where((tbl) => tbl.id.equals(matchId));
final rowsAffected = await query.write( final rowsAffected = await query.write(
MatchTableCompanion(name: Value(name)), MatchTableCompanion(name: Value(name)),
); );
@@ -474,7 +477,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
required String matchId, required String matchId,
required String? groupId, required String? groupId,
}) async { }) async {
final query = update(matchTable)..where((g) => g.id.equals(matchId)); final query = update(matchTable)..where((tbl) => tbl.id.equals(matchId));
final rowsAffected = await query.write( final rowsAffected = await query.write(
MatchTableCompanion(groupId: Value(groupId)), MatchTableCompanion(groupId: Value(groupId)),
); );
@@ -487,7 +490,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
required String matchId, required String matchId,
required String notes, required String notes,
}) async { }) async {
final query = update(matchTable)..where((g) => g.id.equals(matchId)); final query = update(matchTable)..where((tbl) => tbl.id.equals(matchId));
final rowsAffected = await query.write( final rowsAffected = await query.write(
MatchTableCompanion(notes: Value(notes)), MatchTableCompanion(notes: Value(notes)),
); );
@@ -498,7 +501,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
/// Sets the groupId to null. /// Sets the groupId to null.
/// Returns `true` if more than 0 rows were affected, otherwise `false`. /// Returns `true` if more than 0 rows were affected, otherwise `false`.
Future<bool> removeMatchGroup({required String matchId}) async { Future<bool> removeMatchGroup({required String matchId}) async {
final query = update(matchTable)..where((g) => g.id.equals(matchId)); final query = update(matchTable)..where((tbl) => tbl.id.equals(matchId));
final rowsAffected = await query.write( final rowsAffected = await query.write(
const MatchTableCompanion(groupId: Value(null)), const MatchTableCompanion(groupId: Value(null)),
); );
@@ -512,7 +515,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
required String matchId, required String matchId,
required DateTime endedAt, required DateTime endedAt,
}) async { }) async {
final query = update(matchTable)..where((g) => g.id.equals(matchId)); final query = update(matchTable)..where((tbl) => tbl.id.equals(matchId));
final rowsAffected = await query.write( final rowsAffected = await query.write(
MatchTableCompanion(endedAt: Value(endedAt)), MatchTableCompanion(endedAt: Value(endedAt)),
); );
@@ -524,7 +527,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
/// Deletes the match with the given [matchId] from the database. /// Deletes the match with the given [matchId] from the database.
/// Returns `true` if more than 0 rows were affected, otherwise `false`. /// Returns `true` if more than 0 rows were affected, otherwise `false`.
Future<bool> deleteMatch({required String matchId}) async { Future<bool> deleteMatch({required String matchId}) async {
final query = delete(matchTable)..where((g) => g.id.equals(matchId)); final query = delete(matchTable)..where((tbl) => tbl.id.equals(matchId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }
@@ -540,7 +543,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
/// Deletes all matches associated with a specific game. /// Deletes all matches associated with a specific game.
/// Returns the number of matches deleted. /// Returns the number of matches deleted.
Future<int> deleteMatchesByGame({required String gameId}) async { Future<int> deleteMatchesByGame({required String gameId}) async {
final query = delete(matchTable)..where((m) => m.gameId.equals(gameId)); final query = delete(matchTable)..where((tbl) => tbl.gameId.equals(gameId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected; return rowsAffected;
} }

View File

@@ -113,7 +113,7 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
Future<int> getPlayerCount() async { Future<int> getPlayerCount() async {
final count = final count =
await (selectOnly(playerTable)..addColumns([playerTable.id.count()])) await (selectOnly(playerTable)..addColumns([playerTable.id.count()]))
.map((row) => row.read(playerTable.id.count())) .map((tbl) => tbl.read(playerTable.id.count()))
.getSingle(); .getSingle();
return count ?? 0; return count ?? 0;
} }
@@ -122,8 +122,8 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
/// Returns `true` if the player exists, `false` otherwise. /// Returns `true` if the player exists, `false` otherwise.
Future<bool> playerExists({required String playerId}) async { Future<bool> playerExists({required String playerId}) async {
final query = select(playerTable)..where((p) => p.id.equals(playerId)); final query = select(playerTable)..where((p) => p.id.equals(playerId));
final result = await query.getSingleOrNull(); final row = await query.getSingleOrNull();
return result != null; return row != null;
} }
/// Retrieves all players from the database. /// Retrieves all players from the database.
@@ -146,13 +146,13 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
/// Retrieves a [Player] by their [id]. /// Retrieves a [Player] by their [id].
Future<Player> getPlayerById({required String playerId}) async { Future<Player> getPlayerById({required String playerId}) async {
final query = select(playerTable)..where((p) => p.id.equals(playerId)); final query = select(playerTable)..where((p) => p.id.equals(playerId));
final result = await query.getSingle(); final row = await query.getSingle();
return Player( return Player(
id: result.id, id: row.id,
name: result.name, name: row.name,
description: result.description, description: row.description,
createdAt: result.createdAt, createdAt: row.createdAt,
nameCount: result.nameCount, nameCount: row.nameCount,
); );
} }
@@ -174,7 +174,7 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
return transaction(() async { return transaction(() async {
final previousPlayer = await (select( final previousPlayer = await (select(
playerTable, playerTable,
)..where((p) => p.id.equals(playerId))).getSingleOrNull(); )..where((tbl) => tbl.id.equals(playerId))).getSingleOrNull();
if (previousPlayer == null) return false; if (previousPlayer == null) return false;
final previousName = previousPlayer.name; final previousName = previousPlayer.name;
@@ -186,7 +186,7 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
final rowsAffected = final rowsAffected =
await (update( await (update(
playerTable, playerTable,
)..where((p) => p.id.equals(playerId))).write( )..where((tbl) => tbl.id.equals(playerId))).write(
PlayerTableCompanion( PlayerTableCompanion(
name: Value(name), name: Value(name),
nameCount: Value(newNameCount), nameCount: Value(newNameCount),
@@ -203,9 +203,9 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
} else if (remainingCount > 1 && previousCount > 0) { } else if (remainingCount > 1 && previousCount > 0) {
// Shift every player above the gap down by one to keep numbering in order. // Shift every player above the gap down by one to keep numbering in order.
await (update(playerTable)..where( await (update(playerTable)..where(
(p) => (tbl) =>
p.name.equals(previousName) & tbl.name.equals(previousName) &
p.nameCount.isBiggerThanValue(previousCount), tbl.nameCount.isBiggerThanValue(previousCount),
)) ))
.write( .write(
PlayerTableCompanion.custom( PlayerTableCompanion.custom(
@@ -226,9 +226,8 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
required String description, required String description,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(playerTable)..where((g) => g.id.equals(playerId))).write( await (update(playerTable)..where((tbl) => tbl.id.equals(playerId)))
PlayerTableCompanion(description: Value(description)), .write(PlayerTableCompanion(description: Value(description)));
);
return rowsAffected > 0; return rowsAffected > 0;
} }
@@ -237,7 +236,7 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
/// Deletes the player with the given [id] from the database. /// Deletes the player with the given [id] from the database.
/// Returns `true` if the player was deleted, `false` if the player did not exist. /// Returns `true` if the player was deleted, `false` if the player did not exist.
Future<bool> deletePlayer({required String playerId}) async { Future<bool> deletePlayer({required String playerId}) async {
final query = delete(playerTable)..where((p) => p.id.equals(playerId)); final query = delete(playerTable)..where((tbl) => tbl.id.equals(playerId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }
@@ -248,7 +247,7 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
/// Returns the highest name count if players with the same name exist, /// Returns the highest name count if players with the same name exist,
/// otherwise `null`. /// otherwise `null`.
Future<int> getNameCount({required String name}) async { Future<int> getNameCount({required String name}) async {
final query = select(playerTable)..where((p) => p.name.equals(name)); final query = select(playerTable)..where((tbl) => tbl.name.equals(name));
final result = await query.get(); final result = await query.get();
return result.length; return result.length;
} }
@@ -259,7 +258,7 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
required String playerId, required String playerId,
required int nameCount, required int nameCount,
}) async { }) async {
final query = update(playerTable)..where((p) => p.id.equals(playerId)); final query = update(playerTable)..where((tbl) => tbl.id.equals(playerId));
final rowsAffected = await query.write( final rowsAffected = await query.write(
PlayerTableCompanion(nameCount: Value(nameCount)), PlayerTableCompanion(nameCount: Value(nameCount)),
); );
@@ -269,8 +268,8 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
@visibleForTesting @visibleForTesting
Future<Player?> getPlayerWithHighestNameCount({required String name}) async { Future<Player?> getPlayerWithHighestNameCount({required String name}) async {
final query = select(playerTable) final query = select(playerTable)
..where((p) => p.name.equals(name)) ..where((tbl) => tbl.name.equals(name))
..orderBy([(p) => OrderingTerm.desc(p.nameCount)]) ..orderBy([(tbl) => OrderingTerm.desc(tbl.nameCount)])
..limit(1); ..limit(1);
final result = await query.getSingleOrNull(); final result = await query.getSingleOrNull();
if (result != null) { if (result != null) {
@@ -324,9 +323,8 @@ class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
@visibleForTesting @visibleForTesting
Future<bool> initializeNameCount({required String name}) async { Future<bool> initializeNameCount({required String name}) async {
final rowsAffected = final rowsAffected =
await (update(playerTable)..where((p) => p.name.equals(name))).write( await (update(playerTable)..where((tbl) => tbl.name.equals(name)))
const PlayerTableCompanion(nameCount: Value(1)), .write(const PlayerTableCompanion(nameCount: Value(1)));
);
return rowsAffected > 0; return rowsAffected > 0;
} }

View File

@@ -46,15 +46,15 @@ class PlayerGroupDao extends DatabaseAccessor<AppDatabase>
), ),
])..where(playerGroupTable.groupId.equals(groupId)); ])..where(playerGroupTable.groupId.equals(groupId));
final results = await query.map((row) => row.readTable(playerTable)).get(); final result = await query.map((row) => row.readTable(playerTable)).get();
return results return result
.map( .map(
(result) => Player( (row) => Player(
id: result.id, id: row.id,
createdAt: result.createdAt, createdAt: row.createdAt,
name: result.name, name: row.name,
nameCount: result.nameCount, nameCount: row.nameCount,
description: result.description, description: row.description,
), ),
) )
.toList(); .toList();
@@ -67,7 +67,9 @@ class PlayerGroupDao extends DatabaseAccessor<AppDatabase>
required String groupId, required String groupId,
}) async { }) async {
final query = select(playerGroupTable) final query = select(playerGroupTable)
..where((p) => p.playerId.equals(playerId) & p.groupId.equals(groupId)); ..where(
(tbl) => tbl.playerId.equals(playerId) & tbl.groupId.equals(groupId),
);
final result = await query.getSingleOrNull(); final result = await query.getSingleOrNull();
return result != null; return result != null;
} }
@@ -88,7 +90,7 @@ class PlayerGroupDao extends DatabaseAccessor<AppDatabase>
await db.transaction(() async { await db.transaction(() async {
// Remove all existing players from the group // Remove all existing players from the group
final deleteQuery = delete(db.playerGroupTable) final deleteQuery = delete(db.playerGroupTable)
..where((p) => p.groupId.equals(groupId)); ..where((tbl) => tbl.groupId.equals(groupId));
await deleteQuery.go(); await deleteQuery.go();
// Add new players to the player table if they don't exist // Add new players to the player table if they don't exist
@@ -128,7 +130,9 @@ class PlayerGroupDao extends DatabaseAccessor<AppDatabase>
required String groupId, required String groupId,
}) async { }) async {
final query = delete(playerGroupTable) final query = delete(playerGroupTable)
..where((p) => p.playerId.equals(playerId) & p.groupId.equals(groupId)); ..where(
(tbl) => tbl.playerId.equals(playerId) & tbl.groupId.equals(groupId),
);
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }

View File

@@ -40,7 +40,7 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
await (selectOnly(playerMatchTable) await (selectOnly(playerMatchTable)
..where(playerMatchTable.matchId.equals(matchId)) ..where(playerMatchTable.matchId.equals(matchId))
..addColumns([playerMatchTable.playerId.count()])) ..addColumns([playerMatchTable.playerId.count()]))
.map((row) => row.read(playerMatchTable.playerId.count())) .map((tbl) => tbl.read(playerMatchTable.playerId.count()))
.getSingle(); .getSingle();
return (count ?? 0) > 0; return (count ?? 0) > 0;
} }
@@ -56,7 +56,7 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
..where(playerMatchTable.matchId.equals(matchId)) ..where(playerMatchTable.matchId.equals(matchId))
..where(playerMatchTable.playerId.equals(playerId)) ..where(playerMatchTable.playerId.equals(playerId))
..addColumns([playerMatchTable.playerId.count()])) ..addColumns([playerMatchTable.playerId.count()]))
.map((row) => row.read(playerMatchTable.playerId.count())) .map((tbl) => tbl.read(playerMatchTable.playerId.count()))
.getSingle(); .getSingle();
return (count ?? 0) > 0; return (count ?? 0) > 0;
} }
@@ -66,7 +66,7 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
Future<List<Player>> getPlayersOfMatch({required String matchId}) async { Future<List<Player>> getPlayersOfMatch({required String matchId}) async {
final result = await (select( final result = await (select(
playerMatchTable, playerMatchTable,
)..where((p) => p.matchId.equals(matchId))).get(); )..where((tbl) => tbl.matchId.equals(matchId))).get();
if (result.isEmpty) return []; if (result.isEmpty) return [];
@@ -85,8 +85,8 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
}) async { }) async {
final result = final result =
await (select(playerMatchTable) await (select(playerMatchTable)
..where((p) => p.matchId.equals(matchId)) ..where((tbl) => tbl.matchId.equals(matchId))
..where((p) => p.teamId.equals(teamId))) ..where((tbl) => tbl.teamId.equals(teamId)))
.get(); .get();
if (result.isEmpty) return []; if (result.isEmpty) return [];
@@ -109,7 +109,8 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(playerMatchTable)..where( await (update(playerMatchTable)..where(
(p) => p.matchId.equals(matchId) & p.playerId.equals(playerId), (tbl) =>
tbl.matchId.equals(matchId) & tbl.playerId.equals(playerId),
)) ))
.write(PlayerMatchTableCompanion(teamId: Value(teamId))); .write(PlayerMatchTableCompanion(teamId: Value(teamId)));
return rowsAffected > 0; return rowsAffected > 0;
@@ -143,9 +144,9 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
// Remove old players // Remove old players
if (playersToRemove.isNotEmpty) { if (playersToRemove.isNotEmpty) {
await (delete(playerMatchTable)..where( await (delete(playerMatchTable)..where(
(pg) => (tbl) =>
pg.matchId.equals(matchId) & tbl.matchId.equals(matchId) &
pg.playerId.isIn(playersToRemove.toList()), tbl.playerId.isIn(playersToRemove.toList()),
)) ))
.go(); .go();
} }
@@ -182,8 +183,8 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
required String playerId, required String playerId,
}) async { }) async {
final query = delete(playerMatchTable) final query = delete(playerMatchTable)
..where((pg) => pg.matchId.equals(matchId)) ..where((tbl) => tbl.matchId.equals(matchId))
..where((pg) => pg.playerId.equals(playerId)); ..where((tbl) => tbl.playerId.equals(playerId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }

View File

@@ -70,10 +70,10 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
}) async { }) async {
final query = select(scoreEntryTable) final query = select(scoreEntryTable)
..where( ..where(
(s) => (tbl) =>
s.playerId.equals(playerId) & tbl.playerId.equals(playerId) &
s.matchId.equals(matchId) & tbl.matchId.equals(matchId) &
s.roundNumber.equals(roundNumber), tbl.roundNumber.equals(roundNumber),
); );
final result = await query.getSingleOrNull(); final result = await query.getSingleOrNull();
@@ -91,7 +91,7 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
required String matchId, required String matchId,
}) async { }) async {
final query = select(scoreEntryTable) final query = select(scoreEntryTable)
..where((s) => s.matchId.equals(matchId)); ..where((tbl) => tbl.matchId.equals(matchId));
final result = await query.get(); final result = await query.get();
final Map<String, ScoreEntry?> scoresByPlayer = {}; final Map<String, ScoreEntry?> scoresByPlayer = {};
@@ -113,8 +113,10 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
required String matchId, required String matchId,
}) async { }) async {
final query = select(scoreEntryTable) final query = select(scoreEntryTable)
..where((s) => s.playerId.equals(playerId) & s.matchId.equals(matchId)) ..where(
..orderBy([(s) => OrderingTerm.asc(s.roundNumber)]); (tbl) => tbl.playerId.equals(playerId) & tbl.matchId.equals(matchId),
)
..orderBy([(tbl) => OrderingTerm.asc(tbl.roundNumber)]);
final result = await query.get(); final result = await query.get();
return result return result
.map( .map(
@@ -136,8 +138,8 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
final query = selectOnly(scoreEntryTable) final query = selectOnly(scoreEntryTable)
..where(scoreEntryTable.matchId.equals(matchId)) ..where(scoreEntryTable.matchId.equals(matchId))
..addColumns([scoreEntryTable.roundNumber.max()]); ..addColumns([scoreEntryTable.roundNumber.max()]);
final result = await query.getSingle(); final row = await query.getSingle();
return result.read(scoreEntryTable.roundNumber.max()); return row.read(scoreEntryTable.roundNumber.max());
} }
/// Aggregates the total score for a player in a match by summing all their /// Aggregates the total score for a player in a match by summing all their
@@ -166,10 +168,10 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(scoreEntryTable)..where( await (update(scoreEntryTable)..where(
(s) => (tbl) =>
s.playerId.equals(playerId) & tbl.playerId.equals(playerId) &
s.matchId.equals(matchId) & tbl.matchId.equals(matchId) &
s.roundNumber.equals(entry.roundNumber), tbl.roundNumber.equals(entry.roundNumber),
)) ))
.write( .write(
ScoreEntryTableCompanion( ScoreEntryTableCompanion(
@@ -190,10 +192,10 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
}) async { }) async {
final query = delete(scoreEntryTable) final query = delete(scoreEntryTable)
..where( ..where(
(s) => (tbl) =>
s.playerId.equals(playerId) & tbl.playerId.equals(playerId) &
s.matchId.equals(matchId) & tbl.matchId.equals(matchId) &
s.roundNumber.equals(roundNumber), tbl.roundNumber.equals(roundNumber),
); );
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
@@ -201,7 +203,7 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
Future<bool> deleteAllScoresForMatch({required String matchId}) async { Future<bool> deleteAllScoresForMatch({required String matchId}) async {
final query = delete(scoreEntryTable) final query = delete(scoreEntryTable)
..where((s) => s.matchId.equals(matchId)); ..where((tbl) => tbl.matchId.equals(matchId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }
@@ -211,7 +213,9 @@ class ScoreEntryDao extends DatabaseAccessor<AppDatabase>
required String playerId, required String playerId,
}) async { }) async {
final query = delete(scoreEntryTable) final query = delete(scoreEntryTable)
..where((s) => s.playerId.equals(playerId) & s.matchId.equals(matchId)); ..where(
(tbl) => tbl.playerId.equals(playerId) & tbl.matchId.equals(matchId),
);
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }

View File

@@ -20,14 +20,14 @@ class StatisticGameDao extends DatabaseAccessor<AppDatabase>
final results = await query.map((row) => row.readTable(gameTable)).get(); final results = await query.map((row) => row.readTable(gameTable)).get();
return results return results
.map( .map(
(result) => Game( (row) => Game(
id: result.id, id: row.id,
name: result.name, name: row.name,
ruleset: Ruleset.values.firstWhere((e) => e.name == result.ruleset), ruleset: Ruleset.values.firstWhere((e) => e.name == row.ruleset),
description: result.description, description: row.description,
color: AppColor.values.firstWhere((e) => e.name == result.color), color: AppColor.values.firstWhere((e) => e.name == row.color),
icon: result.icon, icon: row.icon,
createdAt: result.createdAt, createdAt: row.createdAt,
), ),
) )
.toList(); .toList();

View File

@@ -18,10 +18,10 @@ class StatisticScopeDao extends DatabaseAccessor<AppDatabase>
final results = await query.get(); final results = await query.get();
return results return results
.map( .map(
(result) => StatisticScope.values.firstWhere( (row) => StatisticScope.values.firstWhere(
(e) => e.name == result.scope, (e) => e.name == row.scope,
orElse: () => throw Exception( orElse: () => throw Exception(
'Invalid scope value: ${result.scope} for statistic ID: $statisticId', 'Invalid scope value: ${row.scope} for statistic ID: $statisticId',
), ),
), ),
) )

View File

@@ -86,7 +86,7 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
Future<int> getTeamCount() async { Future<int> getTeamCount() async {
final count = final count =
await (selectOnly(teamTable)..addColumns([teamTable.id.count()])) await (selectOnly(teamTable)..addColumns([teamTable.id.count()]))
.map((row) => row.read(teamTable.id.count())) .map((tbl) => tbl.read(teamTable.id.count()))
.getSingle(); .getSingle();
return count ?? 0; return count ?? 0;
} }
@@ -95,8 +95,8 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
/// Returns `true` if the team exists, `false` otherwise. /// Returns `true` if the team exists, `false` otherwise.
Future<bool> teamExists({required String teamId}) async { Future<bool> teamExists({required String teamId}) async {
final query = select(teamTable)..where((t) => t.id.equals(teamId)); final query = select(teamTable)..where((t) => t.id.equals(teamId));
final result = await query.getSingleOrNull(); final row = await query.getSingleOrNull();
return result != null; return row != null;
} }
/// Retrieves all teams from the database. /// Retrieves all teams from the database.
@@ -119,12 +119,12 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
/// Retrieves a [Team] by its [teamId], including its members. /// Retrieves a [Team] by its [teamId], including its members.
Future<Team> getTeamById({required String teamId}) async { Future<Team> getTeamById({required String teamId}) async {
final query = select(teamTable)..where((t) => t.id.equals(teamId)); final query = select(teamTable)..where((t) => t.id.equals(teamId));
final result = await query.getSingle(); final row = await query.getSingle();
final members = await _getTeamMembers(teamId: teamId); final members = await _getTeamMembers(teamId: teamId);
return Team( return Team(
id: result.id, id: row.id,
name: result.name, name: row.name,
createdAt: result.createdAt, createdAt: row.createdAt,
members: members, members: members,
); );
} }
@@ -133,13 +133,13 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
Future<List<Player>> _getTeamMembers({required String teamId}) async { Future<List<Player>> _getTeamMembers({required String teamId}) async {
// Get all player_match entries with this teamId // Get all player_match entries with this teamId
final playerMatchQuery = select(db.playerMatchTable) final playerMatchQuery = select(db.playerMatchTable)
..where((pm) => pm.teamId.equals(teamId)); ..where((tbl) => tbl.teamId.equals(teamId));
final playerMatches = await playerMatchQuery.get(); final playerMatches = await playerMatchQuery.get();
if (playerMatches.isEmpty) return []; if (playerMatches.isEmpty) return [];
// Get unique player IDs // Get unique player IDs
final playerIds = playerMatches.map((pm) => pm.playerId).toSet(); final playerIds = playerMatches.map((tbl) => tbl.playerId).toSet();
// Fetch all players // Fetch all players
final players = await Future.wait( final players = await Future.wait(
@@ -156,7 +156,7 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
required String name, required String name,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(teamTable)..where((t) => t.id.equals(teamId))).write( await (update(teamTable)..where((tbl) => tbl.id.equals(teamId))).write(
TeamTableCompanion(name: Value(name)), TeamTableCompanion(name: Value(name)),
); );
return rowsAffected > 0; return rowsAffected > 0;
@@ -175,7 +175,7 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
/// Deletes the team with the given [teamId] from the database. /// Deletes the team with the given [teamId] from the database.
/// Returns `true` if the team was deleted, `false` otherwise. /// Returns `true` if the team was deleted, `false` otherwise.
Future<bool> deleteTeam({required String teamId}) async { Future<bool> deleteTeam({required String teamId}) async {
final query = delete(teamTable)..where((t) => t.id.equals(teamId)); final query = delete(teamTable)..where((tbl) => tbl.id.equals(teamId));
final rowsAffected = await query.go(); final rowsAffected = await query.go();
return rowsAffected > 0; return rowsAffected > 0;
} }