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 */
/// Retrieves the total count of players in the database.
Future<int> 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<int> 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<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));
if (!includeDeleted) {
query.where((p) => p.deleted.equals(false));
}
final result = await query.getSingleOrNull();
return result != null;
}
/// 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);
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<AppDatabase> with _$PlayerDaoMixin {
}
/// 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));
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<AppDatabase> with _$PlayerDaoMixin {
/* Name count management */
/// 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));
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<AppDatabase> with _$PlayerDaoMixin {
}
@visibleForTesting
Future<Player?> getPlayerWithHighestNameCount({required String name}) async {
Future<Player?> 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(