[KAT-05] Katalogdaten laden und aktuell halten #2
Labels
No labels
epic/katalog
epic/konto
epic/partien
epic/querschnitt
epic/sammlung
needs-clarification
prio/could
prio/must
prio/should
size/l
size/m
size/s
size/xl
status/in-progress
status/ready-for-merge
status/spec-review
type/bug
type/epic
type/story
type/tech
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#3 [KAT-01] Spiele suchen
cschlaefke/Shuffle
#13 [KAT-04] Fehlendes Spiel melden
cschlaefke/Shuffle
#25 [SAM-08] Sammlung und Wunschliste aus BGG importieren
cschlaefke/Shuffle
Reference: cschlaefke/Shuffle#2
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Story
Als Admin
möchte ich den Katalog manuell pflegen, Einträge ausblenden und zusammenführen sowie Meldungen bearbeiten – und später Daten aus zugelassenen Quellen importieren,
damit der Katalog vollständig und korrekt bleibt.
Akzeptanzkriterien
Quelle:
requirements/20-r1-akzeptanzkriterien.md§ KAT-05 (Referenz in Tests/PR: „KAT-05 Kriterium n“), Stand 2026-11-02 inkl. Klärungen und N11In R1 wird der Katalog nur manuell gepflegt; ein Import kommt erst mit einer zugelassenen Quelle bzw. der BGG-Lizenz (Klärung 24). Der Admin pflegt Katalog und Meldungen über Supabase Studio/SQL; eine Admin-Oberfläche in der App gibt es bis QUE-08 (R4) nicht (Klärung 44). Das Datenmodell für den späteren Import entsteht trotzdem schon in R1 (Klärung 7).
Querschnitt
Es gelten alle Querschnittskriterien aus
20-r1-akzeptanzkriterien.md§ „Querschnitt für R1“ (Datenschutz QUE-04, Sicherheit der Daten, Sprachen QUE-05, Barrierefreiheit QUE-06, Zustände/Fehler/Netz, Plattformen).Besonders relevant: Sicherheit der Daten Kriterium 2 (Katalog ohne Anmeldung lesbar, nie durch Nutzer veränderbar; Entscheidung O6), Sicherheit der Daten Kriterium 3.
Nicht im Scope
Klärungen
Verbindlich laut
requirements/r1-klaerungen.md(2026-11-02):Offene Fragen
Keine.
Planung
Mögliche Schnitte für die Spec
Referenzen
requirements/20-r1-akzeptanzkriterien.md§ KAT-05requirements/r1-klaerungen.md(inkl. N11)requirements/r1-story-entwurf.md(freigegeben 2026-11-02)requirements/backlog.mdOffene fachliche Fragen aus
requirements/r1-story-entwurf.md, Abschnitt 5 (Nummerierung wie im Entwurf). Bitte hier beantworten; nach Klärung wirdneeds-clarificationentfernt.Frage 7: KAT-05 Krit. 4 und 6: „Ausblenden“, „manuell gepflegte Felder“ und „Erlaubnis je Quelle“ sind im Modell nicht abgebildet.
Frage 24: KAT-02 Krit. 5 / KAT-05 Krit. 6: Welche Datenquelle(n) außer BGG sind für R1 „zugelassen“? Falls die BGG-Lizenz nicht kommt: Woher kommen Katalogdaten, Cover und Beschreibungen zum Start (Handpflege, Seed, andere Quelle)? Das ist für R1 kritisch.
Frage 25: KAT-05 Krit. 4–5: Gibt es in R1 einen Admin-Bereich in der App (QUE-08 ist sonst R4) oder reicht Pflege über ein internes Werkzeug? Wer ist Admin (nur Chris)?
Klärungen eingearbeitet (2026-11-02): Fragen 6, 7, 24, 25/44 laut
requirements/r1-klaerungen.md. Kriterien 1, 3, 6 und der Quellenteil von 2 sind bis zur Lizenz zurückgestellt (Datenmodell aber schon in R1). Kriterien 4 und 5 laufen über Supabase Studio/SQL. Neu sind Kriterium 7 (Startbestand), 8 (Ablauf im Repo dokumentiert) und 9 (nur die DB-Rolle Admin darf ändern).Neue offene Frage (Label
needs-clarificationbleibt):Klärungen N11 eingearbeitet (2026-11-02)
needs-clarificationentfernt.Quelle:
requirements/r1-klaerungen.md, Abschnitt „Neue Fragen aus dem Einarbeiten (N1–N14)“.Spec-Entwurf liegt vor:
docs/specs/2-katalog-daten.md(Branchdocs/2-kat05-spec, Commit34eaab1, noch kein PR).Kurzfassung:
game_reportsund Bearbeiten von Meldungen. 2c muss vor der Umsetzung von #13 gemergt sein.hidden_at) und Zusammenführen (merged_into_id) ändern RLS nicht. „Nicht auffindbar“ läuft über die neue Viewcatalog_games.games.manual_fields. Für Quellen gibt es die Tabellecatalog_sourcesmit Anzeige-Erlaubnis je Quelle.db.seed, auf Staging und Produktion per Studio/psql eingespielt.postgres. Studio ist nur per Tunnel/VPN erreichbar.Offene Fragen an Chris: F1–F9 in § 9.2 der Spec, jeweils mit Optionen und Empfehlung. Es geht um Kollisionen beim Zusammenführen, die Sichtbarkeit ausgeblendeter Einträge, das Umhängen bei Meldungen, die Kennzeichnung des Startbestands, Kurztexte, das Pflegeformat, die Herkunft der Fakten (Datenbankrecht), Umfang und Vokabular sowie das Platzhalter-Cover.
Implementiert wird erst nach Freigabe.
Stand 2026-11-03: Chris hat die Spec (PR #51) freigegeben und F1–F9 wie empfohlen entschieden. Der Review von PR #51 hat einen Blocker ergeben (Varianten privater Spiele würden beim Freigeben einer Meldung öffentlich). Entscheidung von Chris: Varianten werden nicht in den Katalog kopiert, Verweise werden auf die gleichnamige Zielvariante abgebildet, sonst auf null. Außerdem: Alle PRs zu #2 verweisen nur mit
Refs #2; Chris schließt #2 nach der Go-live-Prüfung (C1) und KAT-02 (#4). Die Spec wird entsprechend überarbeitet.Bestätigungen von Chris (2026-11-03) zur Spec in PR #51 (Spec § 9.3), nach dem Re-Review (APPROVE mit Textauflagen):
catalog_gamesist nur die zweite Sicherung. Bestätigt.admin_merge_gamesüberträgtbgg_id/source_*aufs Ziel, wenn es keine hat; bei Konfliktbgg_id_conflictmit den alten Werten. Bestätigt.catalog_importerund nur mitset local. Bestätigt.hidden; Admin-Funktionen nurpostgres/supabase_admin(auchservice_roleohneexecute);on delete restrictfürmerged_into_id,target_game_id,catalog_source_id. Bestätigt.visibilityan bestehendengames-Zeilen wird per Trigger abgelehnt, zusätzlich Runbook-Regel.requirements/r1-klaerungen.mdfestgehalten.Frage zu PR 2b (Zusammenführen), aus dem Review — bitte entscheiden (Label
needs-clarification):Zusammengeführte (und ausgeblendete) Spiele bleiben per ID lesbar (Spec-F2), und die Insert-Policies für Sammlung/Partien prüfen nur, ob das Spiel existiert. Ein veralteter Client oder eine offline erfasste Partie (
plays.client_id) kann sich deshalb nach dem Zusammenführen noch an die Quelle hängen; ein Nutzer kann dann Einträge an Quelle und Ziel haben. Ein zweiter Aufruf vonadmin_merge_gamesscheitert mitmerge_source_already_merged, ein Nachziehen ist so nicht möglich.Optionen:
merged_into_id = p_target; er hängt dann nur die neuen Verweise um. Minimal, kein Eingriff in Nutzer-Schreibwege, Runbook-Schritt „Nachprüfen“ ergänzen.Bis zur Entscheidung bleibt 2b wie spezifiziert (ohne Nachziehen); die Lücke wird im Runbook als bekannte Einschränkung benannt.
Entscheidung zu W3 (Verweise nach dem Zusammenführen), Chris, 2026-11-04:
Kein neuer Code und keine Änderung an den Schreibwegen der Nutzer. Das Risiko ist in R1 gering: Es braucht ein Zusammenführen und danach einen veralteten Client oder eine Offline-Partie, die noch auf die ausgeblendete Quelle zeigt, und betrifft höchstens einzelne Einträge ohne Datenverlust.
Wenn es vorkommt, ruft der Admin als
postgresdie interne Funktionrepoint_game_references(<quelle>, <ziel>)erneut auf (admin_merge_gamesscheitert dann mitmerge_source_already_merged). Umsetzung in PR #56 (2b): ein Runbook-Satz indocs/katalog-pflege.md§ 5 und ein pgTAP-Test, dassrepoint_game_referencesauch bei einer schon zusammengeführten Quelle korrekt umhängt. Die Optionen „Trigger“ und „Insert ablehnen“ werden in R1 nicht gebaut.Der ursprüngliche Beitrag (Kommentar #834) bleibt als Begründung stehen.