Bearbeiten und Löschen von Gruppen #148
@@ -4,7 +4,6 @@ import 'package:tallee/data/db/tables/group_table.dart';
|
|||||||
import 'package:tallee/data/db/tables/match_table.dart';
|
import 'package:tallee/data/db/tables/match_table.dart';
|
||||||
import 'package:tallee/data/db/tables/player_group_table.dart';
|
import 'package:tallee/data/db/tables/player_group_table.dart';
|
||||||
import 'package:tallee/data/dto/group.dart';
|
import 'package:tallee/data/dto/group.dart';
|
||||||
import 'package:tallee/data/dto/match.dart';
|
|
||||||
import 'package:tallee/data/dto/player.dart';
|
import 'package:tallee/data/dto/player.dart';
|
||||||
|
|
||||||
part 'group_dao.g.dart';
|
part 'group_dao.g.dart';
|
||||||
@@ -173,34 +172,6 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Retrieves all matches associated with the given [groupId].
|
|
||||||
/// Queries the database directly, filtering by [groupId].
|
|
||||||
Future<List<Match>> getGroupMatches({required String groupId}) async {
|
|
||||||
final query = select(matchTable)..where((m) => m.groupId.equals(groupId));
|
|
||||||
final rows = await query.get();
|
|
||||||
|
|
||||||
return Future.wait(
|
|
||||||
rows.map((row) async {
|
|
||||||
final game = await db.gameDao.getGameById(gameId: row.gameId);
|
|
||||||
final group = await db.groupDao.getGroupById(groupId: groupId);
|
|
||||||
final players =
|
|
||||||
await db.playerMatchDao.getPlayersOfMatch(matchId: row.id) ?? [];
|
|
||||||
final winner = await db.matchDao.getWinner(matchId: row.id);
|
|
||||||
return Match(
|
|
||||||
id: row.id,
|
|
||||||
name: row.name ?? '',
|
|
||||||
game: game,
|
|
||||||
group: group,
|
|
||||||
players: players,
|
|
||||||
notes: row.notes ?? '',
|
|
||||||
createdAt: row.createdAt,
|
|
||||||
endedAt: row.endedAt,
|
|
||||||
winner: winner,
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Deletes the group with the given [id] from the database.
|
/// Deletes the group with the given [id] 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`.
|
||||||
|
sneeex marked this conversation as resolved
Outdated
|
|||||||
Future<bool> deleteGroup({required String groupId}) async {
|
Future<bool> deleteGroup({required String groupId}) async {
|
||||||
|
|||||||
@@ -268,6 +268,34 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
|||||||
return count ?? 0;
|
return count ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Retrieves all matches associated with the given [groupId].
|
||||||
|
/// Queries the database directly, filtering by [groupId].
|
||||||
|
Future<List<Match>> getGroupMatches({required String groupId}) async {
|
||||||
|
final query = select(matchTable)..where((m) => m.groupId.equals(groupId));
|
||||||
|
final rows = await query.get();
|
||||||
|
|
||||||
|
return Future.wait(
|
||||||
|
rows.map((row) async {
|
||||||
|
final game = await db.gameDao.getGameById(gameId: row.gameId);
|
||||||
|
final group = await db.groupDao.getGroupById(groupId: groupId);
|
||||||
|
final players =
|
||||||
|
await db.playerMatchDao.getPlayersOfMatch(matchId: row.id) ?? [];
|
||||||
|
final winner = await db.matchDao.getWinner(matchId: row.id);
|
||||||
|
return Match(
|
||||||
|
id: row.id,
|
||||||
|
name: row.name ?? '',
|
||||||
|
game: game,
|
||||||
|
group: group,
|
||||||
|
players: players,
|
||||||
|
notes: row.notes ?? '',
|
||||||
|
createdAt: row.createdAt,
|
||||||
|
endedAt: row.endedAt,
|
||||||
|
winner: winner,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// Checks if a match with the given [matchId] exists in the database.
|
/// Checks if a match with the given [matchId] exists in the database.
|
||||||
/// 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 {
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
/// obsolete. For each such match, the group association is removed by setting
|
/// obsolete. For each such match, the group association is removed by setting
|
||||||
/// its [groupId] to null.
|
/// its [groupId] to null.
|
||||||
Future<void> deleteObsoleteMatchGroupRelations() async {
|
Future<void> deleteObsoleteMatchGroupRelations() async {
|
||||||
final groupMatches = await db.groupDao.getGroupMatches(
|
final groupMatches = await db.matchDao.getGroupMatches(
|
||||||
groupId: widget.groupToEdit!.id,
|
groupId: widget.groupToEdit!.id,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -248,7 +248,7 @@ class _GroupDetailViewState extends State<GroupDetailView> {
|
|||||||
/// Loads statistics for this group
|
/// Loads statistics for this group
|
||||||
Future<void> _loadStatistics() async {
|
Future<void> _loadStatistics() async {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
final groupMatches = await db.groupDao.getGroupMatches(groupId: _group.id);
|
final groupMatches = await db.matchDao.getGroupMatches(groupId: _group.id);
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
totalMatches = groupMatches.length;
|
totalMatches = groupMatches.length;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void main() {
|
|||||||
testPlayer4 = Player(name: 'Diana', description: '');
|
testPlayer4 = Player(name: 'Diana', description: '');
|
||||||
testPlayer5 = Player(name: 'Eve', description: '');
|
testPlayer5 = Player(name: 'Eve', description: '');
|
||||||
testGroup1 = Group(
|
testGroup1 = Group(
|
||||||
name: 'Test Group 2',
|
name: 'Test Group 1',
|
||||||
description: '',
|
description: '',
|
||||||
members: [testPlayer1, testPlayer2, testPlayer3],
|
members: [testPlayer1, testPlayer2, testPlayer3],
|
||||||
);
|
);
|
||||||
@@ -351,5 +351,25 @@ void main() {
|
|||||||
);
|
);
|
||||||
expect(removed, isFalse);
|
expect(removed, isFalse);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Fetching all matches related to a group', () async {
|
||||||
|
var matches = await database.matchDao.getGroupMatches(
|
||||||
|
groupId: 'non-existing-id',
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(matches, isEmpty);
|
||||||
|
|
||||||
|
await database.matchDao.addMatch(match: testMatch1);
|
||||||
|
print(await database.matchDao.getAllMatches());
|
||||||
|
|
||||||
|
matches = await database.matchDao.getGroupMatches(groupId: testGroup1.id);
|
||||||
|
|
||||||
|
expect(matches, isNotEmpty);
|
||||||
|
|
||||||
|
final match = matches.first;
|
||||||
|
expect(match.id, testMatch1.id);
|
||||||
|
expect(match.group, isNotNull);
|
||||||
|
expect(match.group!.id, testGroup1.id);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user
Du sollst direkt die Datenbankanfrage so gestalten, dass du nur die Matches bekommst, welche die Gruppe enthalten. Das war mein Punkt
so wenig effort wie möglich
ja schlimm
match name soll nicht nullable sein oder?
Eigentlich nicht, das ist schon wieder Fusch am Bau