Bearbeiten und Löschen von Gruppen #148
@@ -3,6 +3,7 @@ import 'package:tallee/data/db/database.dart';
|
||||
import 'package:tallee/data/db/tables/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/match.dart';
|
||||
import 'package:tallee/data/dto/player.dart';
|
||||
|
||||
part 'group_dao.g.dart';
|
||||
@@ -171,6 +172,12 @@ class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
|
||||
});
|
||||
}
|
||||
|
||||
/// Retrieves all matches associated with the given [groupId].
|
||||
Future<List<Match>> getGroupMatches({required String groupId}) async {
|
||||
|
sneeex marked this conversation as resolved
Outdated
|
||||
final matches = await db.matchDao.getAllMatches();
|
||||
return matches.where((match) => match.group?.id == groupId).toList();
|
||||
}
|
||||
|
||||
/// Deletes the group with the given [id] from the database.
|
||||
/// Returns `true` if more than 0 rows were affected, otherwise `false`.
|
||||
Future<bool> deleteGroup({required String groupId}) async {
|
||||
|
||||
@@ -338,10 +338,10 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
return rowsAffected > 0;
|
||||
}
|
||||
|
||||
/// Entfernt die Gruppen-Verknüpfung des Matches mit der gegebenen [matchId].
|
||||
/// Setzt die groupId auf null.
|
||||
/// Gibt `true` zurück, wenn mehr als 0 Zeilen betroffen waren, ansonsten `false`.
|
||||
Future<bool> deleteMatchGroup({required String matchId}) async {
|
||||
/// Removes the group association of the match with the given [matchId].
|
||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Kommentar auf Deutsch Kommentar auf Deutsch
|
||||
/// Sets the groupId to null.
|
||||
/// Returns `true` if more than 0 rows were affected, otherwise `false`.
|
||||
Future<bool> removeMatchGroup({required String matchId}) async {
|
||||
|
flixcoo marked this conversation as resolved
Outdated
flixcoo
commented
Methode lieber sowas nennen Methode lieber sowas nennen `removeGroupFromMatch` da hier ja keine keine Gruppe gelöscht wird
|
||||
final query = update(matchTable)..where((g) => g.id.equals(matchId));
|
||||
final rowsAffected = await query.write(
|
||||
const MatchTableCompanion(groupId: Value(null)),
|
||||
|
||||
@@ -190,11 +190,16 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
||||
return (success, updatedGroup);
|
||||
}
|
||||
|
||||
/// Removes the group association from matches that no longer belong to the edited group.
|
||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Kurzen doc comment nochmal zu dieser Methode vllt Kurzen doc comment nochmal zu dieser Methode vllt
|
||||
///
|
||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Lieber Methode Lieber Methode `getMatchesToGroup()` in `groupDao.dart`, kann ggf. später auch noch einmal verwendet werden
sneeex
commented
hast das auch so gemacht hast das auch so gemacht
sneeex
commented
habs von dir kopiert habs von dir kopiert
flixcoo
commented
wo hab ich das gemacht? File und Zeile wo hab ich das gemacht? File und Zeile
sneeex
commented
flixcoo
commented
ja aber da diese vorgehensweise jetzt mehr als einmal im code ist machts erst recht sinn dafür ne methode zu schreiben und entsprechende vorkommen zu ersetzen ja aber da diese vorgehensweise jetzt mehr als einmal im code ist machts erst recht sinn dafür ne methode zu schreiben und entsprechende vorkommen zu ersetzen
|
||||
/// After updating the group's members, matches that were previously linked to
|
||||
/// this group but don't have any of the newly selected players are considered
|
||||
/// obsolete. For each such match, the group association is removed by setting
|
||||
/// its [groupId] to null.
|
||||
Future<void> deleteObsoleteMatchGroupRelations() async {
|
||||
final matches = await db.matchDao.getAllMatches();
|
||||
final groupMatches = matches
|
||||
.where((match) => match.group?.id == widget.groupToEdit!.id)
|
||||
.toList();
|
||||
final groupMatches = await db.groupDao.getGroupMatches(
|
||||
groupId: widget.groupToEdit!.id,
|
||||
);
|
||||
|
||||
final selectedPlayerIds = selectedPlayers.map((p) => p.id).toSet();
|
||||
final relationshipsToDelete = groupMatches.where((match) {
|
||||
@@ -204,7 +209,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
||||
}).toList();
|
||||
|
||||
for (var match in relationshipsToDelete) {
|
||||
await db.matchDao.deleteMatchGroup(matchId: match.id);
|
||||
await db.matchDao.removeMatchGroup(matchId: match.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -194,7 +194,6 @@ class _GroupDetailViewState extends State<GroupDetailView> {
|
||||
return CreateGroupView(
|
||||
groupToEdit: _group,
|
||||
onMembersChanged: () {
|
||||
isLoading = true;
|
||||
_loadStatistics();
|
||||
|
sneeex marked this conversation as resolved
flixcoo
commented
Warum wird Warum wird `isLoading` nicht in `_loadStatistics` auf true gesetzt?
sneeex
commented
weil du's so gemacht hast großer weil du's so gemacht hast großer
flixcoo
commented
Setzt es mal in der Methode anfangs auf true, so ists z.B. auch im Setzt es mal in der Methode anfangs auf true, so ists z.B. auch im `GroupView`
|
||||
},
|
||||
);
|
||||
@@ -248,10 +247,8 @@ class _GroupDetailViewState extends State<GroupDetailView> {
|
||||
|
||||
/// Loads statistics for this group
|
||||
Future<void> _loadStatistics() async {
|
||||
final matches = await db.matchDao.getAllMatches();
|
||||
final groupMatches = matches
|
||||
.where((match) => match.group?.id == _group.id)
|
||||
.toList();
|
||||
isLoading = true;
|
||||
final groupMatches = await db.groupDao.getGroupMatches(groupId: _group.id);
|
||||
|
||||
setState(() {
|
||||
totalMatches = groupMatches.length;
|
||||
|
||||
@@ -308,13 +308,12 @@ void main() {
|
||||
expect(fetchedMatch.winner!.id, testPlayer5.id);
|
||||
});
|
||||
|
||||
// Tests for removeMatchGroup
|
||||
test(
|
||||
|
sneeex marked this conversation as resolved
flixcoo
commented
Unnötiger Kommentar Unnötiger Kommentar
|
||||
'removeMatchGroup removes group from match with existing group',
|
||||
() async {
|
||||
await database.matchDao.addMatch(match: testMatch1);
|
||||
|
||||
final removed = await database.matchDao.deleteMatchGroup(
|
||||
final removed = await database.matchDao.removeMatchGroup(
|
||||
matchId: testMatch1.id,
|
||||
);
|
||||
expect(removed, isTrue);
|
||||
@@ -323,7 +322,6 @@ void main() {
|
||||
matchId: testMatch1.id,
|
||||
);
|
||||
expect(updatedMatch.group, null);
|
||||
// Andere Felder bleiben unverändert
|
||||
expect(updatedMatch.game.id, testMatch1.game.id);
|
||||
expect(updatedMatch.name, testMatch1.name);
|
||||
|
sneeex marked this conversation as resolved
flixcoo
commented
Unnötiger Kommentar & auf deutsch Unnötiger Kommentar & auf deutsch
|
||||
expect(updatedMatch.notes, testMatch1.notes);
|
||||
@@ -335,10 +333,9 @@ void main() {
|
||||
() async {
|
||||
await database.matchDao.addMatch(match: testMatchOnlyPlayers);
|
||||
|
||||
final removed = await database.matchDao.deleteMatchGroup(
|
||||
final removed = await database.matchDao.removeMatchGroup(
|
||||
matchId: testMatchOnlyPlayers.id,
|
||||
);
|
||||
// Update sollte trotzdem eine Zeile betreffen
|
||||
expect(removed, isTrue);
|
||||
|
||||
final updatedMatch = await database.matchDao.getMatchById(
|
||||
|
sneeex marked this conversation as resolved
flixcoo
commented
Unnötiger Kommentar & auf deutsch Unnötiger Kommentar & auf deutsch
|
||||
@@ -349,7 +346,7 @@ void main() {
|
||||
);
|
||||
|
||||
test('removeMatchGroup on non-existing match returns false', () async {
|
||||
final removed = await database.matchDao.deleteMatchGroup(
|
||||
final removed = await database.matchDao.removeMatchGroup(
|
||||
matchId: 'non-existing-id',
|
||||
);
|
||||
expect(removed, isFalse);
|
||||
|
||||
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