QR-Typen je Gruppe freigeben #11
Notifications
Total Time Spent: 10 minutes
florian.wilde
10 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/qrcode-generator#11
Reference in New Issue
Block a user
Heute gilt die Freigabe eines Typs für die ganze Installation: Was abgeschaltet ist, ist für alle weg. Bei mehreren Gruppen ist das zu grob — die Marketingabteilung braucht Social Media, die Werkstatt nur Website und PDF.
Geplant: Die Freigabe bekommt eine zweite Dimension. Es bleibt eine globale Einstellung als Grundlage, und je Gruppe lässt sich davon abweichen. Wer in mehreren Gruppen ist, sieht auf der Startseite die Vereinigung; beim Anlegen entscheidet die gewählte Gruppe.
Zu klären ist der Fall, in dem ein Typ global aus, in einer Gruppe aber an ist — entweder die Gruppe darf das überstimmen, oder die globale Abschaltung gewinnt immer. Die zweite Lesart ist die weniger überraschende und wahrscheinlich die richtige.
Berührt: QrTypeSetting (zusammengesetzter Schlüssel aus Typ und Gruppe), src/lib/qr/availability.ts, die Startseite und die Typ-Verwaltung, die dann eine Gruppenauswahl bekommt.
Angelegt aus QR Code Generator in Nebula.
🤖 Claude Code hat mit der Umsetzung begonnen.
feat/11-typen-je-gruppeQrTypeGroupSettingmit zusammengesetztem Schlüssel aus Typ und Gruppe. Abweichung von deiner Skizze: nichtQrTypeSettingerweitern. Ein zusammengesetzter Schlüssel bräuchte dort eine leere Gruppe für den globalen Fall, und PostgreSQL lässt in einem eindeutigen Index beliebig viele NULL nebeneinander zu — die Eindeutigkeit der globalen Zeile wäre also gerade nicht gesichert. Zwei Tabellen sind hier die geradere Lösung.src/lib/qr/availability.tsrechnet: freigegeben = global freigegeben und in dieser Gruppe nicht abgewählt.Zeiterfassung läuft.
✅ Umsetzung abgeschlossen — bereit zum Testen.
Die offene Frage, so beantwortet
Ich bin deiner eigenen Einschätzung gefolgt: Die globale Abschaltung gewinnt immer. Ein Typ, der in der Grundeinstellung aus ist, lässt sich in keiner Gruppe einschalten — der Schalter steht dort ausgegraut und daneben steht „In der Grundeinstellung abgeschaltet — für diese Gruppe nicht einschaltbar“. Andersherum wäre „hier abgeschaltet“ keine verlässliche Aussage mehr.
Ein Detail daraus: „an“ für eine Gruppe löscht die Abweichung, statt eine Zeile mit „an“ zu hinterlassen. So eine Zeile würde vortäuschen, sie könnte eine globale Abschaltung überstimmen.
Abweichung von deiner Skizze
Nicht
QrTypeSettingerweitert, sondern eine eigene TabelleQrTypeGroupSettingmit zusammengesetztem Schlüssel aus Typ und Gruppe. Grund: Ein zusammengesetzter Schlüssel in der bestehenden Tabelle bräuchte für den globalen Fall eine leere Gruppe, und PostgreSQL lässt in einem eindeutigen Index beliebig vieleNULLnebeneinander zu — ausgerechnet die Eindeutigkeit der globalen Zeile wäre also nicht gesichert.Was geändert wurde
POST /api/codesprüft das mit und unterscheidet in der Meldung zwischen „für diese Gruppe abgeschaltet“ und „in der Verwaltung abgeschaltet“.GET /api/admin/types?group={id},PATCHmit optionalemgroupId.ON DELETE CASCADE).Migration:
20260821030000_typen_je_gruppeGeänderte Dateien
src/lib/qr/availability.ts— die Rechnung,getVisibleQrTypesForActor,setQrTypeEnabledForGroupsrc/app/api/admin/types/route.ts,src/app/api/codes/route.tssrc/components/type-settings.tsx,src/app/(app)/verwaltung/typen/page.tsxsrc/app/(app)/page.tsx,src/app/(app)/erstellen/[type]/page.tsxprisma/schema.prisma+ Migration,README.md,docs/funktionen.mdSo testest du es
git switch feat/11-typen-je-gruppedocker compose up -d --build appGeprüft mit einer eigenen Testreihe: 38 von 38 — Abweichung setzen und zurücknehmen, „global aus gewinnt“ über API und beim Anlegen, Anlegen je Gruppe, Vereinigung auf der Startseite, Oberfläche samt gesperrtem Schalter, Handy-Breite, keine Konsolenfehler.
Aufgewendete Zeit: 00:11
Pull Request: #17
Nach Freigabe:
/issue-freigabe 11🚀 Freigegeben und nach
mainübernommen.c6891f6Nach den vorangegangenen fünf Merges habe ich
mainin den Zweig geholt — ohne Konflikt, obwohlprisma/schema.prisma,docs/funktionen.md,src/app/api/codes/route.tsund die Erstellen-Seite auch von #6, #7 und #8 angefasst wurden. Nachgesehen, dass alles nebeneinander steht: Gruppenfreigabe, Dublettenprüfung und Logo-Anhang in derselben Route;checkSecret, die Logo-Spalten undQrTypeGroupSettingim selben Schema.Testreihen gegen den zusammengeführten Stand: Typen je Gruppe 38 von 38, Filter nach Art 28 von 28. Typprüfung, Linter und die Changelog-Prüfung auf
main: grün.Issue wird geschlossen.