Backend: User-Preferences-Speicher (JSONB-Tabelle + API) #214
Labels
No labels
component/backend
component/docs
component/e2e
component/frontend
component/infra
component/keycloak
prio/high
prio/low
prio/medium
type/bug
type/chore
type/feature
type/refactor
type/test
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
WompSchmiede/FamilienFeierPlaner#214
Loading…
Add table
Add a link
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?
Motivation: Es gibt bisher keinen zentralen Speicher fuer Benutzereinstellungen (z. B. Locale/Sprache, UI-Praferenzen, Benachrichtigungseinstellungen). Ein separates JSONB-Feld in der
persons-Tabelle zu ergaenzen wuerde diese unnötig aufblähen und bei jedemGET /personsCall mitgeliefert werden.Vorschlag: Separate Tabelle
userPreferencesVorteile:
API:
/api/v1/persons/{person_id}/preferences/api/v1/persons/{person_id}/preferencesNicht Teil dieses Issues:
Milestone: MS-REST (#32)
Labels: component/backend, prio/medium, type/feature
Erweiterung aus der Diskussion:
GET /api/v1/persons/mesoll preferences-Feld mitliefern (Default{})PUT /api/v1/persons/:person_id/preferences(merged)ui_locale-Cookie bleibt als Cache, Preferences sind Source of TruthUpdate Account-Seite (
app/account):/api/v1/persons/melesen (falls vorhanden) → Cookie → "de"Preferences-Schema (JSONB):
{"locale": "de"}Betrifft jetzt auch Frontend (component/frontend).
Zusaetzliche Anforderung aus Diskussion:
Auth: Preferences-Endpunkte nur fuer die Person selbst (Eigendaten):
GET /api/v1/persons/{person_id}/preferences:requireAuth+requireOwnData('person_id')PUT /api/v1/persons/{person_id}/preferences:requireAuth+requireOwnData('person_id')PUT-Logik — Keycloak-Sync bei Locale-Aenderung:
newPreferences.localevorhanden ist UNDperson.keycloakIdgesetzt ist:PUT /admin/realms/{realm}/users/{keycloakId}mit{ attributes: { locale: [newPreferences.locale] } }Betroffene Dateien:
backend/src/routes/persons.ts— neue Route + Handler + kcApi-Importbackend/src/__tests__/persons.test.ts— Tests fuer neuen Preferences-Endpunktbackend/prisma/schema.prisma— neues ModelUserPreferencesdocs/design/03-autorisierungsmatrix.md— neuen Endpunkt eintragenbackend/openapi.yaml— Preferences-Schema + Endpunktfrontend/src/routes/app/account/+page.svelte— Sprach-Select speichert via Preferences-API statt nur Cookie