Bearbeiten und Löschen von Gruppen #148

Merged
sneeex merged 20 commits from feature/118-bearbeiten-und-löschen-von-gruppen into development 2026-03-09 20:30:38 +00:00
Owner

Bearbeiten und Löschen von Gruppen

Zugehörige Issue(s):
Closes #118 #155

Beschreibung

Es wurde ein View zum Bearbeiten und Löschen von Gruppen erstellt.
Dazu wurde auch eine neue Methode in der DB erstellt: deleteMatchGroup

Zusätzliche Anmerkungen

Ich habe einen Key zu jedem ScaffoldMessenger hinzugefügt, weil es ohne in dem Group_Detail_View nicht funktioniert hat, obwohl es ohne Key durch das PlayerSelection Widget, was in dem View benutzt wird, funktioniert hat.

TODO:

  • Wenn Member aus Gruppe entfernt wird, Gruppensieger aktualisieren
  • Wenn Gruppe gelöscht wird, sollen alle Verknüpfungen der Matches gelöscht werden
  • Wenn Gruppe bearbeitet wird und dadurch in nem Match obsolet, Gruppe aus Match entfernen
# Bearbeiten und Löschen von Gruppen **Zugehörige Issue(s):** Closes #118 #155 ## Beschreibung Es wurde ein View zum Bearbeiten und Löschen von Gruppen erstellt. Dazu wurde auch eine neue Methode in der DB erstellt: deleteMatchGroup ## Zusätzliche Anmerkungen Ich habe einen Key zu jedem ScaffoldMessenger hinzugefügt, weil es ohne in dem `Group_Detail_View` nicht funktioniert hat, obwohl es ohne Key durch das PlayerSelection Widget, was in dem View benutzt wird, funktioniert hat. ## TODO: - [x] Wenn Member aus Gruppe entfernt wird, Gruppensieger aktualisieren - [x] Wenn Gruppe gelöscht wird, sollen alle Verknüpfungen der Matches gelöscht werden - [x] Wenn Gruppe bearbeitet wird und dadurch in nem Match obsolet, Gruppe aus Match entfernen
sneeex added the
PR
Ready for Review
2
label 2026-01-10 19:17:37 +00:00
sneeex self-assigned this 2026-01-10 19:17:37 +00:00
sneeex added 1 commit 2026-01-10 19:17:38 +00:00
implement group edit view
Some checks failed
Pull Request Pipeline / test (pull_request) Successful in 2m1s
Pull Request Pipeline / lint (pull_request) Failing after 2m3s
45a419cae7
sneeex requested review from Owners 2026-01-10 19:17:38 +00:00
sneeex removed the
PR
Ready for Review
2
label 2026-01-10 19:17:50 +00:00
sneeex added a new dependency 2026-01-10 19:18:00 +00:00
sneeex added 1 commit 2026-01-10 20:48:26 +00:00
Merge branch 'development' into feature/118-bearbeiten-und-löschen-von-gruppen
Some checks failed
Pull Request Pipeline / test (pull_request) Successful in 2m1s
Pull Request Pipeline / lint (pull_request) Failing after 2m3s
525acec1d3
sneeex added 1 commit 2026-01-10 21:11:32 +00:00
rename CreateGroupView to GroupDetailView for clarity and consistency
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m3s
Pull Request Pipeline / lint (pull_request) Successful in 2m4s
b6dd0541ae
sneeex added 1 commit 2026-01-10 21:13:49 +00:00
remove questionmark
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m2s
Pull Request Pipeline / lint (pull_request) Successful in 2m5s
ee84c60ba6
sneeex added 1 commit 2026-01-10 21:19:23 +00:00
Merge remote-tracking branch 'origin/development' into feature/118-bearbeiten-und-löschen-von-gruppen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m33s
Pull Request Pipeline / lint (pull_request) Successful in 2m44s
38663c6b67
# Conflicts:
#	lib/l10n/arb/app_de.arb
#	lib/l10n/arb/app_en.arb
#	lib/l10n/generated/app_localizations_de.dart
#	lib/presentation/views/main_menu/settings_view.dart
sneeex added 1 commit 2026-01-10 21:20:16 +00:00
fix merge mistake
All checks were successful
Pull Request Pipeline / lint (pull_request) Successful in 3m9s
Pull Request Pipeline / test (pull_request) Successful in 2m30s
caf60d046b
flixcoo added a new dependency 2026-01-12 18:36:05 +00:00
sneeex added 3 commits 2026-01-13 20:07:52 +00:00
# Conflicts:
#	lib/presentation/views/main_menu/settings_view.dart
merge dev into #118
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 1m59s
Pull Request Pipeline / lint (pull_request) Successful in 2m7s
ed642e3d4f
flixcoo removed a dependency 2026-01-13 20:12:02 +00:00
sneeex added 1 commit 2026-01-13 20:35:14 +00:00
fix snackbar showing also showing on other screens (#155)
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m10s
Pull Request Pipeline / lint (pull_request) Successful in 2m12s
1b297d15b0
sneeex added 1 commit 2026-01-13 20:38:57 +00:00
add context to mounted check
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m3s
Pull Request Pipeline / lint (pull_request) Successful in 2m9s
016c1ceb6e
Owner

Ich hatte vergessen, dass du das Feature schon angefangen hast. Hatte auch schon angefangen, dass bearbeiten zu implementiert. Hab mir deine loadPlayerList() angeschaut und gedacht, maybe willst du das eher so machen wie ich das hatte, ist etwas simpler und kürzer beim gleichen outcome (Kommentare wären mindestens gut, für die unterschiedlichen Fälle):

  void loadPlayerList() {
    _allPlayersFuture = Future.wait([
      db.playerDao.getAllPlayers(),
      Future.delayed(Constants.minimumSkeletonDuration),
    ]).then((results) => results[0] as List<Player>);
    if (mounted) {
      _allPlayersFuture.then((loadedPlayers) {
        loadedPlayers.sort((a, b) => a.name.compareTo(b.name));

        setState(() {
          if (widget.availablePlayers != null) {
            // CASE 1: Available players are provided

            widget.availablePlayers!.sort((a, b) => a.name.compareTo(b.name));
            allPlayers = [...widget.availablePlayers!];
            suggestedPlayers = [...allPlayers];

            if (widget.initialSelectedPlayers != null) {
              // CASE 1.1: Available players & initial selected players are provided
              // If so, ensure only valid players are pre-selected

              selectedPlayers = widget.initialSelectedPlayers!
                  .where(
                    (p) => widget.availablePlayers!.any(
                      (available) => available.id == p.id,
                    ),
                  )
                  .toList();
            }
          } else if (widget.initialSelectedPlayers != null) {
            // CASE 2: Only initial selected players are provided
            // If so, pre-select them and ensure no duplicates
            // in suggested players

            allPlayers = [...loadedPlayers];
            selectedPlayers = [...widget.initialSelectedPlayers!];
            suggestedPlayers = allPlayers
                .where((player) => !selectedPlayers.contains(player))
                .toList();
          } else {
            /// Case 3: No players are provided, use all from database

            allPlayers = [...loadedPlayers];
            suggestedPlayers = [...loadedPlayers];
            selectedPlayers = [];
          }
          isLoading = false;
        });
      });
    }
  }

Ich hatte vergessen, dass du das Feature schon angefangen hast. Hatte auch schon angefangen, dass bearbeiten zu implementiert. Hab mir deine `loadPlayerList()` angeschaut und gedacht, maybe willst du das eher so machen wie ich das hatte, ist etwas simpler und kürzer beim gleichen outcome (Kommentare wären mindestens gut, für die unterschiedlichen Fälle): ```dart void loadPlayerList() { _allPlayersFuture = Future.wait([ db.playerDao.getAllPlayers(), Future.delayed(Constants.minimumSkeletonDuration), ]).then((results) => results[0] as List<Player>); if (mounted) { _allPlayersFuture.then((loadedPlayers) { loadedPlayers.sort((a, b) => a.name.compareTo(b.name)); setState(() { if (widget.availablePlayers != null) { // CASE 1: Available players are provided widget.availablePlayers!.sort((a, b) => a.name.compareTo(b.name)); allPlayers = [...widget.availablePlayers!]; suggestedPlayers = [...allPlayers]; if (widget.initialSelectedPlayers != null) { // CASE 1.1: Available players & initial selected players are provided // If so, ensure only valid players are pre-selected selectedPlayers = widget.initialSelectedPlayers! .where( (p) => widget.availablePlayers!.any( (available) => available.id == p.id, ), ) .toList(); } } else if (widget.initialSelectedPlayers != null) { // CASE 2: Only initial selected players are provided // If so, pre-select them and ensure no duplicates // in suggested players allPlayers = [...loadedPlayers]; selectedPlayers = [...widget.initialSelectedPlayers!]; suggestedPlayers = allPlayers .where((player) => !selectedPlayers.contains(player)) .toList(); } else { /// Case 3: No players are provided, use all from database allPlayers = [...loadedPlayers]; suggestedPlayers = [...loadedPlayers]; selectedPlayers = []; } isLoading = false; }); }); } } ```
flixcoo reviewed 2026-01-16 23:21:19 +00:00
@@ -248,0 +250,4 @@
// Excludes already selected players from the suggested players list.
suggestedPlayers = loadedPlayers.where((p) => !widget.initialSelectedPlayers!.any((ip) => ip.id == p.id)).toList();
// Ensures that only players available for selection are pre-selected.
selectedPlayers = widget.initialSelectedPlayers!
Owner

Bzw das ist doch nicht notwendig oder? Ansonsten lass die doch so, das ist gut. Aber ergänz mal Kommentare zu den unterschiedlichen Cases

Bzw das ist doch nicht notwendig oder? Ansonsten lass die doch so, das ist gut. Aber ergänz mal Kommentare zu den unterschiedlichen Cases
sneeex marked this conversation as resolved
Author
Owner

Ich hatte vergessen, dass du das Feature schon angefangen hast. Hatte auch schon angefangen, dass bearbeiten zu implementiert. Hab mir deine loadPlayerList() angeschaut und gedacht, maybe willst du das eher so machen wie ich das hatte, ist etwas simpler und kürzer beim gleichen outcome (Kommentare wären mindestens gut, für die unterschiedlichen Fälle):

  void loadPlayerList() {
    _allPlayersFuture = Future.wait([
      db.playerDao.getAllPlayers(),
      Future.delayed(Constants.minimumSkeletonDuration),
    ]).then((results) => results[0] as List<Player>);
    if (mounted) {
      _allPlayersFuture.then((loadedPlayers) {
        loadedPlayers.sort((a, b) => a.name.compareTo(b.name));

        setState(() {
          if (widget.availablePlayers != null) {
            // CASE 1: Available players are provided

            widget.availablePlayers!.sort((a, b) => a.name.compareTo(b.name));
            allPlayers = [...widget.availablePlayers!];
            suggestedPlayers = [...allPlayers];

            if (widget.initialSelectedPlayers != null) {
              // CASE 1.1: Available players & initial selected players are provided
              // If so, ensure only valid players are pre-selected

              selectedPlayers = widget.initialSelectedPlayers!
                  .where(
                    (p) => widget.availablePlayers!.any(
                      (available) => available.id == p.id,
                    ),
                  )
                  .toList();
            }
          } else if (widget.initialSelectedPlayers != null) {
            // CASE 2: Only initial selected players are provided
            // If so, pre-select them and ensure no duplicates
            // in suggested players

            allPlayers = [...loadedPlayers];
            selectedPlayers = [...widget.initialSelectedPlayers!];
            suggestedPlayers = allPlayers
                .where((player) => !selectedPlayers.contains(player))
                .toList();
          } else {
            /// Case 3: No players are provided, use all from database

            allPlayers = [...loadedPlayers];
            suggestedPlayers = [...loadedPlayers];
            selectedPlayers = [];
          }
          isLoading = false;
        });
      });
    }
  }

Du bist wirklich dumm

> Ich hatte vergessen, dass du das Feature schon angefangen hast. Hatte auch schon angefangen, dass bearbeiten zu implementiert. Hab mir deine `loadPlayerList()` angeschaut und gedacht, maybe willst du das eher so machen wie ich das hatte, ist etwas simpler und kürzer beim gleichen outcome (Kommentare wären mindestens gut, für die unterschiedlichen Fälle): > > ```dart > void loadPlayerList() { > _allPlayersFuture = Future.wait([ > db.playerDao.getAllPlayers(), > Future.delayed(Constants.minimumSkeletonDuration), > ]).then((results) => results[0] as List<Player>); > if (mounted) { > _allPlayersFuture.then((loadedPlayers) { > loadedPlayers.sort((a, b) => a.name.compareTo(b.name)); > > setState(() { > if (widget.availablePlayers != null) { > // CASE 1: Available players are provided > > widget.availablePlayers!.sort((a, b) => a.name.compareTo(b.name)); > allPlayers = [...widget.availablePlayers!]; > suggestedPlayers = [...allPlayers]; > > if (widget.initialSelectedPlayers != null) { > // CASE 1.1: Available players & initial selected players are provided > // If so, ensure only valid players are pre-selected > > selectedPlayers = widget.initialSelectedPlayers! > .where( > (p) => widget.availablePlayers!.any( > (available) => available.id == p.id, > ), > ) > .toList(); > } > } else if (widget.initialSelectedPlayers != null) { > // CASE 2: Only initial selected players are provided > // If so, pre-select them and ensure no duplicates > // in suggested players > > allPlayers = [...loadedPlayers]; > selectedPlayers = [...widget.initialSelectedPlayers!]; > suggestedPlayers = allPlayers > .where((player) => !selectedPlayers.contains(player)) > .toList(); > } else { > /// Case 3: No players are provided, use all from database > > allPlayers = [...loadedPlayers]; > suggestedPlayers = [...loadedPlayers]; > selectedPlayers = []; > } > isLoading = false; > }); > }); > } > } > > ``` Du bist wirklich dumm
sneeex added 2 commits 2026-01-17 09:21:57 +00:00
# Conflicts:
#	lib/presentation/views/main_menu/group_view/create_group_view.dart
#	lib/presentation/views/main_menu/settings_view/settings_view.dart
#	lib/presentation/widgets/tiles/group_tile.dart
fix merge conflicts
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m4s
Pull Request Pipeline / lint (pull_request) Successful in 2m9s
919a38afe5
flixcoo added 1 commit 2026-01-17 15:05:20 +00:00
Merge remote-tracking branch 'origin/development' into feature/118-bearbeiten-und-löschen-von-gruppen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m7s
Pull Request Pipeline / lint (pull_request) Successful in 2m9s
8b7300eac3
# Conflicts:
#	pubspec.yaml
sneeex added 1 commit 2026-01-18 09:51:56 +00:00
delete group view & update build nr
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m6s
Pull Request Pipeline / lint (pull_request) Successful in 2m14s
f1df067824
flixcoo added the
Workflow
On Hold
3
label 2026-01-18 10:14:46 +00:00
sneeex added 2 commits 2026-01-18 10:41:53 +00:00
# Conflicts:
#	lib/l10n/arb/app_de.arb
#	lib/l10n/arb/app_en.arb
#	lib/l10n/generated/app_localizations.dart
#	lib/l10n/generated/app_localizations_de.dart
#	lib/l10n/generated/app_localizations_en.dart
#	lib/presentation/views/main_menu/group_view/groups_view.dart
#	lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart
#	lib/presentation/widgets/tiles/group_tile.dart
#	pubspec.yaml
merge & made group_detail_view.dart & group_create_view.dart work together when editing
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m5s
Pull Request Pipeline / lint (pull_request) Successful in 2m10s
e4c3bc1c5e
sneeex added 2 commits 2026-01-18 11:25:50 +00:00
# Conflicts:
#	lib/presentation/views/main_menu/group_view/create_group_view.dart
#	pubspec.yaml
merge fix
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m2s
Pull Request Pipeline / lint (pull_request) Successful in 2m8s
810f635987
flixcoo removed the
Workflow
On Hold
3
label 2026-03-06 21:33:06 +00:00
sneeex added 1 commit 2026-03-07 22:33:29 +00:00
Merge dev & implement db
Some checks failed
Pull Request Pipeline / test (pull_request) Successful in 39s
Pull Request Pipeline / lint (pull_request) Failing after 44s
81aad9280c
sneeex added 1 commit 2026-03-07 22:34:46 +00:00
fix dart analysis issues
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 37s
Pull Request Pipeline / lint (pull_request) Successful in 46s
8e20fe1034
sneeex added the
PR
Ready for Review
2
label 2026-03-07 22:35:03 +00:00
sneeex requested review from flixcoo 2026-03-07 22:35:58 +00:00
sneeex changed title from WIP: Bearbeiten und Löschen von Gruppen to Bearbeiten und Löschen von Gruppen 2026-03-07 22:36:09 +00:00
sneeex added 1 commit 2026-03-08 08:30:06 +00:00
Merge remote-tracking branch 'origin/development' into feature/118-bearbeiten-und-löschen-von-gruppen
All checks were successful
Pull Request Pipeline / lint (pull_request) Successful in 45s
Pull Request Pipeline / test (pull_request) Successful in 40s
bfad74db22
# Conflicts:
#	lib/presentation/views/main_menu/group_view/create_group_view.dart
sneeex added 1 commit 2026-03-08 08:39:25 +00:00
Merge branch 'development' into feature/118-bearbeiten-und-löschen-von-gruppen
Some checks failed
Pull Request Pipeline / test (pull_request) Successful in 37s
Pull Request Pipeline / lint (pull_request) Failing after 45s
feb2b756bd
Author
Owner
grafik.png grafik.png

was tun @flixcoo

<img width="667" alt="grafik.png" src="attachments/ef452ad0-5789-4598-8030-39b7267f18af"> <img width="477" alt="grafik.png" src="attachments/a0f96478-f513-46b7-8c30-cc81fd194be2"> was tun @flixcoo
Author
Owner
grafik.png hier
<img width="581" alt="grafik.png" src="attachments/bac20158-5c4f-4b05-b68b-3b4c11894a4a"> hier
flixcoo added 1 commit 2026-03-08 10:07:19 +00:00
excluded license file from linter rules
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 38s
Pull Request Pipeline / lint (pull_request) Successful in 47s
4ae1432943
Owner
grafik.png grafik.png

was tun @flixcoo

grafik.png hier

fixed

> <img width="667" alt="grafik.png" src="attachments/ef452ad0-5789-4598-8030-39b7267f18af"> > <img width="477" alt="grafik.png" src="attachments/a0f96478-f513-46b7-8c30-cc81fd194be2"> > > was tun @flixcoo > <img width="581" alt="grafik.png" src="attachments/bac20158-5c4f-4b05-b68b-3b4c11894a4a"> > hier fixed
flixcoo requested changes 2026-03-08 10:12:18 +00:00
Dismissed
flixcoo left a comment
Owner

Gruppen Sieger wird nicht aktualisiert wenn man Members entfernt.

<img src="/attachments/e7d77bce-777b-4c0d-bb07-462fd9b129b5" height=500> Gruppen Sieger wird nicht aktualisiert wenn man Members entfernt.
@@ -146,3 +148,3 @@
? null
: () async {
late Group? updatedGroup;
Group? updatedGroup;
Owner

Kompletten Code hier in mindestens eine Methode auslagern, falls sinnvoll auch mehrere

Kompletten Code hier in mindestens eine Methode auslagern, falls sinnvoll auch mehrere
sneeex marked this conversation as resolved
Author
Owner

Gruppen Sieger wird nicht aktualisiert wenn man Members entfernt.

ja was machen wa denn? entfernen oder nicht?
Vorallem wird das doch in zukunft eh dynamisch berechnet oder nicht?

> <img src="/attachments/e7d77bce-777b-4c0d-bb07-462fd9b129b5" height=500> > > Gruppen Sieger wird nicht aktualisiert wenn man Members entfernt. ja was machen wa denn? entfernen oder nicht? Vorallem wird das doch in zukunft eh dynamisch berechnet oder nicht?
sneeex added 2 commits 2026-03-08 10:27:46 +00:00
Merge remote-tracking branch 'origin/feature/118-bearbeiten-und-löschen-von-gruppen' into feature/118-bearbeiten-und-löschen-von-gruppen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 39s
Pull Request Pipeline / lint (pull_request) Successful in 45s
e3c39521a0
Owner

ja was machen wa denn? entfernen oder nicht?
Vorallem wird das doch in zukunft eh dynamisch berechnet oder nicht?

Also ich würde entfernen, weil das wird nur beim holen des matches dynamisch berechnet. Die Table hat keine Winner spalte mehr, das Objekt hat aber das Winner attribut noch, damit man den einfacher abgreifen kann

> ja was machen wa denn? entfernen oder nicht? > Vorallem wird das doch in zukunft eh dynamisch berechnet oder nicht? Also ich würde entfernen, weil das wird nur beim holen des matches dynamisch berechnet. Die Table hat keine Winner spalte mehr, das Objekt hat aber das Winner attribut noch, damit man den einfacher abgreifen kann
flixcoo requested changes 2026-03-08 11:22:08 +00:00
Dismissed
@@ -191,1 +158,4 @@
/// Saves the group by creating a new one or updating the existing one,
/// depending on whether the widget is in edit mode.
Future<void> _saveGroup() async {
Owner

gerne die Methode nochmal aufteilen, wie bei mir in CreateMatchView:

  void buttonNavigation(BuildContext context) async {
    if (widget.matchToEdit != null) {
      await updateMatch();
      if (context.mounted) {
        Navigator.pop(context);
      }
    } else {
      final match = await createMatch();

      if (context.mounted) {
        Navigator.pushReplacement(
          context,
          adaptivePageRoute(
            fullscreenDialog: true,
            builder: (context) => MatchResultView(
              match: match,
              onWinnerChanged: widget.onWinnerChanged,
            ),
          ),
        );
      }
    }
  }

gerne die Methode nochmal aufteilen, wie bei mir in `CreateMatchView`: ```dart void buttonNavigation(BuildContext context) async { if (widget.matchToEdit != null) { await updateMatch(); if (context.mounted) { Navigator.pop(context); } } else { final match = await createMatch(); if (context.mounted) { Navigator.pushReplacement( context, adaptivePageRoute( fullscreenDialog: true, builder: (context) => MatchResultView( match: match, onWinnerChanged: widget.onWinnerChanged, ), ), ); } } } ```
Author
Owner

sneeex marked this conversation as resolved
flixcoo added 2 commits 2026-03-08 11:23:01 +00:00
Merge remote-tracking branch 'origin/feature/118-bearbeiten-und-löschen-von-gruppen' into feature/118-bearbeiten-und-löschen-von-gruppen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 38s
Pull Request Pipeline / lint (pull_request) Successful in 45s
5b7ef4051d
Owner

Was gerade auch noch ein Problem ist:

  • Gruppe mit drei Leuten erstellen
  • Match mit Gruppe erstellen
  • Zwei der drei Mitglieder der Gruppe aus dem Match entfernen
  • Verbleibendes Mitglied aus der Gruppe entfernen
  • Gruppe ist immer noch Match zugewiesen obwohl keiner der Gruppenmitglieder mehr in dem Match ist
Was gerade auch noch ein Problem ist: - Gruppe mit drei Leuten erstellen - Match mit Gruppe erstellen - Zwei der drei Mitglieder der Gruppe aus dem Match entfernen - Verbleibendes Mitglied aus der Gruppe entfernen - Gruppe ist immer noch Match zugewiesen obwohl keiner der Gruppenmitglieder mehr in dem Match ist
Author
Owner

Zwei der drei Mitglieder der Gruppe aus dem Match entfernen
wie geht das denn? das match besteht doch nur aus 3 leuten? wenn man 2 entfernt, hätte man ja ein match mit einer person, das geht doch nicht zu speichern oder? oder meinst du du hattest ein match mit 4 leuten und davon 3 der gruppe?

aber dein kernpunkt ist: (?) [p = normaler spieler, pg = spieler in gruppe g]

  • du hast nen match (p1, p2, pg3, pg4)
  • da leute einer gruppe drin (pg3, pg4)
  • dann entfernst du die leute aus der gruppe (dann p1, p2, p3, p4)
  • das match aktualisiert die gruppe des matches nicht insofern, dass nicht die verknüpfung zur gruppe g gelöscht wird)

und generell:

  • gruppen löschen soll gruppe aus match entfernen? was ist wenn dann match keine mitglieder mehr hat? match löschen? was ist wenn dann match nurnoch ein mitglied hat? match löschen?

eigentlich würde ich ja als user wollen, dass meine matches nicht verändert werden, wenn ich ne gruppe lösche denke ich

> Zwei der drei Mitglieder der Gruppe aus dem Match entfernen wie geht das denn? das match besteht doch nur aus 3 leuten? wenn man 2 entfernt, hätte man ja ein match mit einer person, das geht doch nicht zu speichern oder? oder meinst du du hattest ein match mit 4 leuten und davon 3 der gruppe? aber dein kernpunkt ist: (?) [p = normaler spieler, pg = spieler in gruppe g] - du hast nen match (p1, p2, pg3, pg4) - da leute einer gruppe drin (pg3, pg4) - dann entfernst du die leute aus der gruppe (dann p1, p2, p3, p4) - das match aktualisiert die gruppe des matches nicht insofern, dass nicht die verknüpfung zur gruppe g gelöscht wird) und generell: - gruppen löschen soll gruppe aus match entfernen? was ist wenn dann match keine mitglieder mehr hat? match löschen? was ist wenn dann match nurnoch ein mitglied hat? match löschen? eigentlich würde ich ja als user wollen, dass meine matches nicht verändert werden, wenn ich ne gruppe lösche denke ich
sneeex added 2 commits 2026-03-08 14:10:38 +00:00
Merge remote-tracking branch 'origin/feature/118-bearbeiten-und-löschen-von-gruppen' into feature/118-bearbeiten-und-löschen-von-gruppen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 37s
Pull Request Pipeline / lint (pull_request) Successful in 44s
4f91130cb5
Owner

Ich habe ein game, das ist fertig und da ist jemand Winner.
Player: 1, 2, 3, 4,
Gruppenspieler: 1, 2, 3
Winner Spieler: 1

Jetzt bearbeite ich die Gruppe und entferne Player 1

Dann habe ich
Player: 2, 3, 4
Gruppenspieler, 2, 3
Winner Spieler: ???? (soll der dann beibehalten werden oder nicht?, m.M.n. beibehalten werden)

Gleiche frage, wenn das match noch nicht finished ist, sollen die player in dem match bearbeitet werden oder nicht?

  1. Wenn ein Spieler aus einer Gruppe entfernt wird, soll er in allen Matches drin bleiben, dann als extra Spieler
  2. Wenn eine Gruppe gelöscht wird, sollen die Spieler dieses Matches unverändert bleiben
> Ich habe ein game, das ist fertig und da ist jemand Winner. > Player: 1, 2, 3, 4, > Gruppenspieler: 1, 2, 3 > Winner Spieler: 1 > > Jetzt bearbeite ich die Gruppe und entferne Player 1 > > Dann habe ich > Player: 2, 3, 4 > Gruppenspieler, 2, 3 > Winner Spieler: ???? (soll der dann beibehalten werden oder nicht?, m.M.n. beibehalten werden) > > Gleiche frage, wenn das match noch nicht finished ist, sollen die player in dem match bearbeitet werden oder nicht? 1. Wenn ein Spieler aus einer Gruppe entfernt wird, soll er in allen Matches drin bleiben, dann als extra Spieler 2. Wenn eine Gruppe gelöscht wird, sollen die Spieler dieses Matches unverändert bleiben
flixcoo added
PR
In Review
1
and removed
PR
Ready for Review
2
labels 2026-03-09 13:03:20 +00:00
sneeex added 5 commits 2026-03-09 14:29:29 +00:00
sneeex requested review from flixcoo 2026-03-09 14:29:40 +00:00
flixcoo requested changes 2026-03-09 19:30:28 +00:00
Dismissed
flixcoo left a comment
Owner

Review

Paar Kleinigkeiten, Funktionalität top

## Review Paar Kleinigkeiten, Funktionalität top
@@ -338,6 +338,17 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
return rowsAffected > 0;
}
/// Entfernt die Gruppen-Verknüpfung des Matches mit der gegebenen [matchId].
Owner

Kommentar auf Deutsch

Kommentar auf Deutsch
sneeex marked this conversation as resolved
@@ -341,0 +341,4 @@
/// 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 {
Owner

Methode lieber sowas nennen removeGroupFromMatch da hier ja keine keine Gruppe gelöscht wird

Methode lieber sowas nennen `removeGroupFromMatch` da hier ja keine keine Gruppe gelöscht wird
flixcoo marked this conversation as resolved
@@ -192,0 +190,4 @@
return (success, updatedGroup);
}
Future<void> deleteObsoleteMatchGroupRelations() async {
Owner

Kurzen doc comment nochmal zu dieser Methode vllt

Kurzen doc comment nochmal zu dieser Methode vllt
sneeex marked this conversation as resolved
@@ -192,0 +191,4 @@
}
Future<void> deleteObsoleteMatchGroupRelations() async {
final matches = await db.matchDao.getAllMatches();
Owner

Lieber Methode getMatchesToGroup() in groupDao.dart, kann ggf. später auch noch einmal verwendet werden

Lieber Methode `getMatchesToGroup()` in `groupDao.dart`, kann ggf. später auch noch einmal verwendet werden
Author
Owner

hast das auch so gemacht

hast das auch so gemacht
Author
Owner

habs von dir kopiert

habs von dir kopiert
Owner

wo hab ich das gemacht? File und Zeile

wo hab ich das gemacht? File und Zeile
Author
Owner

hast das auch so gemacht, group detail view
grafik.png

hast das auch so gemacht, group detail view <img width="491" alt="grafik.png" src="attachments/ae2ff61f-bc2e-45fc-baa5-62254ff3a2e1">
101 KiB
Owner

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
sneeex marked this conversation as resolved
@@ -195,0 +194,4 @@
return CreateGroupView(
groupToEdit: _group,
onMembersChanged: () {
isLoading = true;
Owner

Warum wird isLoading nicht in _loadStatistics auf true gesetzt?

Warum wird `isLoading` nicht in `_loadStatistics` auf true gesetzt?
Author
Owner

weil du's so gemacht hast großer

weil du's so gemacht hast großer
Owner

Setzt es mal in der Methode anfangs auf true, so ists z.B. auch im GroupView

Setzt es mal in der Methode anfangs auf true, so ists z.B. auch im `GroupView`
sneeex marked this conversation as resolved
@@ -308,2 +308,4 @@
expect(fetchedMatch.winner!.id, testPlayer5.id);
});
// Tests for removeMatchGroup
Owner

Unnötiger Kommentar

Unnötiger Kommentar
sneeex marked this conversation as resolved
@@ -310,0 +323,4 @@
matchId: testMatch1.id,
);
expect(updatedMatch.group, null);
// Andere Felder bleiben unverändert
Owner

Unnötiger Kommentar & auf deutsch

Unnötiger Kommentar & auf deutsch
sneeex marked this conversation as resolved
@@ -310,0 +338,4 @@
final removed = await database.matchDao.deleteMatchGroup(
matchId: testMatchOnlyPlayers.id,
);
// Update sollte trotzdem eine Zeile betreffen
Owner

Unnötiger Kommentar & auf deutsch

Unnötiger Kommentar & auf deutsch
sneeex marked this conversation as resolved
sneeex added 1 commit 2026-03-09 20:00:16 +00:00
fix comments
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 40s
Pull Request Pipeline / lint (pull_request) Successful in 45s
23d00c64ab
sneeex requested review from flixcoo 2026-03-09 20:00:19 +00:00
flixcoo requested changes 2026-03-09 20:04:08 +00:00
Dismissed
@@ -172,2 +173,4 @@
}
/// Retrieves all matches associated with the given [groupId].
Future<List<Match>> getGroupMatches({required String groupId}) async {
Owner

Du sollst direkt die Datenbankanfrage so gestalten, dass du nur die Matches bekommst, welche die Gruppe enthalten. Das war mein Punkt

Du sollst direkt die Datenbankanfrage so gestalten, dass du nur die Matches bekommst, welche die Gruppe enthalten. Das war mein Punkt
Author
Owner

so wenig effort wie möglich

so wenig effort wie möglich
Owner

ja schlimm

ja schlimm
Author
Owner

match name soll nicht nullable sein oder?

match name soll nicht nullable sein oder?
Author
Owner
grafik.png
<img width="602" alt="grafik.png" src="attachments/052438c1-2d54-4df8-8450-db3bedd8f495">
176 KiB
Owner

Eigentlich nicht, das ist schon wieder Fusch am Bau

Eigentlich nicht, das ist schon wieder Fusch am Bau
sneeex marked this conversation as resolved
sneeex added 2 commits 2026-03-09 20:13:26 +00:00
remove nullable from match name
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 39s
Pull Request Pipeline / lint (pull_request) Successful in 44s
4e98dcde41
sneeex requested review from flixcoo 2026-03-09 20:13:36 +00:00
flixcoo added 1 commit 2026-03-09 20:27:09 +00:00
Moved getGroupMatches + Tests
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 39s
Pull Request Pipeline / lint (pull_request) Successful in 44s
611033b5cd
flixcoo approved these changes 2026-03-09 20:27:27 +00:00
sneeex merged commit 59d1efb4fb into development 2026-03-09 20:30:38 +00:00
sneeex deleted branch feature/118-bearbeiten-und-löschen-von-gruppen 2026-03-09 20:30:38 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Depends on
#88 Neue Datenbank-Struktur
liquid-development/game-tracker
Reference: liquid-development/game-tracker#148