deleted players get ignored when includeDeleted is false

This commit is contained in:
gelbeinhalb
2026-05-12 20:43:28 +02:00
parent 0870f418d5
commit b1934e64bd

View File

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