Files
cabo-counter/lib/data/dao/round_scores_dao.dart

60 lines
2.1 KiB
Dart

import 'package:cabo_counter/data/db/database.dart';
import 'package:cabo_counter/data/db/tables/round_scores_table.dart';
import 'package:cabo_counter/data/dto/round_score.dart';
import 'package:drift/drift.dart';
part 'round_scores_dao.g.dart';
@DriftAccessor(tables: [RoundScoresTable])
class RoundScoresDao extends DatabaseAccessor<AppDatabase>
with _$RoundScoresDaoMixin {
RoundScoresDao(super.db);
/// Retrieves all scores for a specific round by its ID.
/// This method returns a list of [RoundScore] objects sorted by player
/// position in the corresponding gameSession
Future<List<RoundScore>> _getRoundScoresByRoundId(String roundId) async {
final query = select(roundScoresTable)
..where((tbl) => tbl.roundId.equals(roundId));
final result = await query.get();
// Get positions for each player
final scoresWithPosition = await Future.wait(result.map((row) async {
final position = await db.playerDao.getPositionByPlayerId(row.playerId);
return MapEntry(row, position);
}));
// Sort rows by position
scoresWithPosition.sort((a, b) => a.value.compareTo(b.value));
return scoresWithPosition.map((entry) {
final row = entry.key;
return RoundScore(
roundId: roundId,
playerId: row.playerId,
score: row.score,
scoreUpdate: row.scoreUpdate,
);
}).toList();
}
/// Retrieves all scores for a specific round by its ID.
/// This method returns a list of scores sorted by player position in the
/// corresponding gameSession.
Future<List<int>> getScoresByRoundId(String roundId) async {
List<RoundScore> roundScores = await _getRoundScoresByRoundId(roundId);
return roundScores.map((score) => score.score).toList();
}
/// Retrieves all score updates for a specific round by its ID.
/// This method returns a list of score updates sorted by player position in
/// the corresponding gameSession.
Future<List<int>> getScoreUpdatesByRoundId(String roundId) async {
List<RoundScore> roundScores = await _getRoundScoresByRoundId(roundId);
return roundScores.map((score) => score.scoreUpdate).toList();
}
}