Refactor: Consent-API von Events entkoppeln (PUT /api/v1/persons/{id}/consent) #249

Closed
opened 2026-07-06 13:30:58 +00:00 by niboer · 0 comments
Owner

Beschreibung

Der bisherige Consent-Endpoint PUT /api/v1/events/{event_id}/guests/{person_id}/consent ist an ein Event gekoppelt und prueft auf Existenz eines eventGuest. Laut Design-Dokument (02-datenmodell.md) ist Consent jedoch ein personenbezogenes Feature. Ein User kann aktuell keinen Consent geben, wenn er zu keinem Event eingeladen ist.

Aenderungen

Backend (component/backend)

  • Neuer Endpoint: PUT /api/v1/persons/{person_id}/consent
    • Auth: requireAuth + requireOwnDataOrGroupMember('person_id')
    • Body: { policyVersion: string, acceptedBy?: string }
    • Keine eventGuest-Prüfung, nur Person-Existenz-Prüfung (404)
    • Response: ConsentResponse
  • Alter Endpoint in backend/src/routes/guests.ts wird entfernt
  • OpenAPI-Spec (backend/openapi.yaml) um neuen Path ergaenzt
  • Unit-Tests in backend/src/__tests__/consent.test.ts: neue Testgruppe, alte entfernt

Frontend (component/frontend)

  • consent-dialog.svelte: eventId-Prop und invitations-Prop entfernt; PUT-URL auf neuen Pfad geaendert
  • +layout.server.ts: consentDialogInvitations nicht mehr benoetigt → entfernt
  • +layout.svelte, account/+page.svelte: Props angepasst
  • Frontend-Tests consent-dialog.test.ts: angepasst

Dokumentation (component/docs)

  • docs/design/02-datenmodell.md: Consent-Datenfluss aktualisiert, "kein Backend-Guard"-Aussage korrigiert
  • docs/design/03-api-design.md: Consent-Endpoint in Persons-Gruppe verschoben
  • docs/design/03-autorisierungsmatrix.md: Alten Eintrag entfernt, neuen unter Persons ergaenzt
  • docs/design/04-frontend-architektur.md: Props aktualisiert
  • frontend/AGENTS.md: Consent-Abschnitt aktualisiert
  • README.md: API-Übersicht aktualisiert

Dependencies / Notes

  • Alte Tests fuer PUT /api/v1/events/{event_id}/guests/{person_id}/consent in consent.test.ts werden komplett entfernt
  • requireSelfOrGroupMember in auth.ts bleibt erhalten (wird von anderen Endpoints genutzt)
  • Keine DB-Migration noetig
## Beschreibung Der bisherige Consent-Endpoint `PUT /api/v1/events/{event_id}/guests/{person_id}/consent` ist an ein Event gekoppelt und prueft auf Existenz eines `eventGuest`. Laut Design-Dokument (`02-datenmodell.md`) ist Consent jedoch ein personenbezogenes Feature. Ein User kann aktuell keinen Consent geben, wenn er zu keinem Event eingeladen ist. ## Aenderungen ### Backend (`component/backend`) - Neuer Endpoint: `PUT /api/v1/persons/{person_id}/consent` - Auth: `requireAuth + requireOwnDataOrGroupMember('person_id')` - Body: `{ policyVersion: string, acceptedBy?: string }` - Keine eventGuest-Prüfung, nur Person-Existenz-Prüfung (404) - Response: `ConsentResponse` - Alter Endpoint in `backend/src/routes/guests.ts` wird entfernt - OpenAPI-Spec (`backend/openapi.yaml`) um neuen Path ergaenzt - Unit-Tests in `backend/src/__tests__/consent.test.ts`: neue Testgruppe, alte entfernt ### Frontend (`component/frontend`) - `consent-dialog.svelte`: eventId-Prop und invitations-Prop entfernt; PUT-URL auf neuen Pfad geaendert - `+layout.server.ts`: `consentDialogInvitations` nicht mehr benoetigt → entfernt - `+layout.svelte`, `account/+page.svelte`: Props angepasst - Frontend-Tests `consent-dialog.test.ts`: angepasst ### Dokumentation (`component/docs`) - `docs/design/02-datenmodell.md`: Consent-Datenfluss aktualisiert, "kein Backend-Guard"-Aussage korrigiert - `docs/design/03-api-design.md`: Consent-Endpoint in Persons-Gruppe verschoben - `docs/design/03-autorisierungsmatrix.md`: Alten Eintrag entfernt, neuen unter Persons ergaenzt - `docs/design/04-frontend-architektur.md`: Props aktualisiert - `frontend/AGENTS.md`: Consent-Abschnitt aktualisiert - `README.md`: API-Übersicht aktualisiert ## Dependencies / Notes - Alte Tests fuer `PUT /api/v1/events/{event_id}/guests/{person_id}/consent` in `consent.test.ts` werden komplett entfernt - `requireSelfOrGroupMember` in auth.ts bleibt erhalten (wird von anderen Endpoints genutzt) - Keine DB-Migration noetig
Sign in to join this conversation.
No description provided.