diff --git a/lib/data/dao/player_dao.dart b/lib/data/dao/player_dao.dart index 51e5845..332afb9 100644 --- a/lib/data/dao/player_dao.dart +++ b/lib/data/dao/player_dao.dart @@ -110,25 +110,40 @@ class PlayerDao extends DatabaseAccessor with _$PlayerDaoMixin { /* Read */ /// Retrieves the total count of players in the database. - Future getPlayerCount() async { - final count = - await (selectOnly(playerTable)..addColumns([playerTable.id.count()])) - .map((row) => row.read(playerTable.id.count())) - .getSingle(); + /// By default, only returns non-deleted players. + Future getPlayerCount({bool includeDeleted = false}) async { + final query = selectOnly(playerTable)..addColumns([playerTable.id.count()]); + if (!includeDeleted) { + query.where(playerTable.deleted.equals(false)); + } + final count = await query + .map((row) => row.read(playerTable.id.count())) + .getSingle(); return count ?? 0; } /// Checks if a player with the given [playerId] exists in the database. + /// By default, only returns non-deleted players. /// Returns `true` if the player exists, `false` otherwise. - Future playerExists({required String playerId}) async { + Future playerExists({ + required String playerId, + bool includeDeleted = false, + }) async { final query = select(playerTable)..where((p) => p.id.equals(playerId)); + if (!includeDeleted) { + query.where((p) => p.deleted.equals(false)); + } final result = await query.getSingleOrNull(); return result != null; } /// Retrieves all players from the database. - Future> getAllPlayers() async { + /// By default, only returns non-deleted players. + Future> getAllPlayers({bool includeDeleted = false}) async { final query = select(playerTable); + if (!includeDeleted) { + query.where((p) => p.deleted.equals(false)); + } final result = await query.get(); return result .map( @@ -144,8 +159,15 @@ class PlayerDao extends DatabaseAccessor with _$PlayerDaoMixin { } /// Retrieves a [Player] by their [id]. - Future getPlayerById({required String playerId}) async { + /// By default, only returns non-deleted players. + Future getPlayerById({ + required String playerId, + bool includeDeleted = false, + }) async { final query = select(playerTable)..where((p) => p.id.equals(playerId)); + if (!includeDeleted) { + query.where((p) => p.deleted.equals(false)); + } final result = await query.getSingle(); return Player( id: result.id, @@ -226,8 +248,15 @@ class PlayerDao extends DatabaseAccessor with _$PlayerDaoMixin { /* Name count management */ /// Retrieves the count of players with the given [name]. - Future getNameCount({required String name}) async { + /// By default, only returns non-deleted players. + Future getNameCount({ + required String name, + bool includeDeleted = false, + }) async { final query = select(playerTable)..where((p) => p.name.equals(name)); + if (!includeDeleted) { + query.where((p) => p.deleted.equals(false)); + } final result = await query.get(); return result.length; } @@ -246,11 +275,17 @@ class PlayerDao extends DatabaseAccessor with _$PlayerDaoMixin { } @visibleForTesting - Future getPlayerWithHighestNameCount({required String name}) async { + Future getPlayerWithHighestNameCount({ + required String name, + bool includeDeleted = false, + }) async { final query = select(playerTable) ..where((p) => p.name.equals(name)) ..orderBy([(p) => OrderingTerm.desc(p.nameCount)]) ..limit(1); + if (!includeDeleted) { + query.where((p) => p.deleted.equals(false)); + } final result = await query.getSingleOrNull(); if (result != null) { return Player(