feat(backend): Self-Service-Endpunkte und Auth-Hooks fuer Gaeste #64

Closed
opened 2026-06-21 16:18:02 +00:00 by niboer · 0 comments
Owner

Beschreibung

Damit Gaeste ihre Einladungen sehen und selbststaendig zu-/absagen koennen, werden neue Backend-Endpunkte und ein neuer Auth-Hook benoetigt. Der bestehende Status-Endpunkt erlaubt nur Organisatoren, den Status zu aendern - das muss auch fuer den Gast selbst (und seinen Delegierten) moeglich sein.

Neue Endpunkte

GET /api/v1/persons/{person_id}/invitations

  • Listet alle Events, zu denen die Person als Gast eingeladen ist
  • Rueckgabe: [{ eventId, title, eventDate, status, paymentStatus, contributionEuro, formAnswers, respondedAt }]
  • Auth:
    equireOwnDataOrDelegation('person_id')

PUT /api/v1/events/{event_id}/guests/{person_id}/status (Aenderung)

  • Bisher:
    equireOrganizer ? Neu:
    equireSelfOrOrganizer('event_id', 'person_id')
  • Erlaubt Gast selbst, Delegierten ODER Organisator die Aenderung
  • OpenAPI-Schema UpdateGuestStatus erhaelt optionales ormAnswers-Feld

Neuer Auth-Hook:

equireSelfOrOrganizer

  • Prueft: Ist der User = targetPersonId? (selbst)
  • Oder: Gibt es eine Delegation? (Stellvertreter)
  • Oder: Ist der User Organizer des Events?
  • Sonst: 403 Forbidden

Dateien

  • ackend/src/lib/auth.ts - Neuer Hook
  • ackend/src/routes/guests.ts - Status-Endpunkt aktualisieren
  • ackend/src/routes/persons.ts - Neuer invitations-Endpunkt
  • ackend/openapi.yaml - Neues Schema Invitation, Endpunkt + Auth-Aenderung
  • ackend/src/tests/guests.test.ts - Test fuer Gast-RSVP
  • ackend/src/tests/auth.test.ts - Test fuer requireSelfOrOrganizer
  • ackend/src/tests/persons.test.ts - Test fuer invitations

Tests

  • requireSelfOrOrganizer: Gast darf eigenen Status aendern, Delegierter darf, Organisator darf, Fremder bekommt 403
  • PUT status mit formAnswers: formAnswers werden gespeichert
  • GET invitations: Gibt nur eingeladene Events zurueck, leeres Array wenn keine
  • OpenAPI-Schema: UpdateGuestStatus hat optionales formAnswers

Akzeptanzkriterien

  • requireSelfOrOrganizer-Hook ist implementiert und getestet
  • Gast kann eigenen Guest-Status auf confirmed/declined aendern
  • Delegierter kann Status im Namen des Gasts aendern
  • Organisator kann weiterhin jeden Gast-Status aendern
  • GET /invitations gibt alle Events der Person zurueck
  • formAnswers kann mit dem Status-Update mitgesendet werden
## Beschreibung Damit Gaeste ihre Einladungen sehen und selbststaendig zu-/absagen koennen, werden neue Backend-Endpunkte und ein neuer Auth-Hook benoetigt. Der bestehende Status-Endpunkt erlaubt nur Organisatoren, den Status zu aendern - das muss auch fuer den Gast selbst (und seinen Delegierten) moeglich sein. ## Neue Endpunkte ### GET /api/v1/persons/{person_id}/invitations - Listet alle Events, zu denen die Person als Gast eingeladen ist - Rueckgabe: [{ eventId, title, eventDate, status, paymentStatus, contributionEuro, formAnswers, respondedAt }] - Auth: equireOwnDataOrDelegation('person_id') ### PUT /api/v1/events/{event_id}/guests/{person_id}/status (Aenderung) - Bisher: equireOrganizer ? Neu: equireSelfOrOrganizer('event_id', 'person_id') - Erlaubt Gast selbst, Delegierten ODER Organisator die Aenderung - OpenAPI-Schema UpdateGuestStatus erhaelt optionales ormAnswers-Feld ## Neuer Auth-Hook: equireSelfOrOrganizer - Prueft: Ist der User = targetPersonId? (selbst) - Oder: Gibt es eine Delegation? (Stellvertreter) - Oder: Ist der User Organizer des Events? - Sonst: 403 Forbidden ## Dateien - ackend/src/lib/auth.ts - Neuer Hook - ackend/src/routes/guests.ts - Status-Endpunkt aktualisieren - ackend/src/routes/persons.ts - Neuer invitations-Endpunkt - ackend/openapi.yaml - Neues Schema Invitation, Endpunkt + Auth-Aenderung - ackend/src/__tests__/guests.test.ts - Test fuer Gast-RSVP - ackend/src/__tests__/auth.test.ts - Test fuer requireSelfOrOrganizer - ackend/src/__tests__/persons.test.ts - Test fuer invitations ## Tests - requireSelfOrOrganizer: Gast darf eigenen Status aendern, Delegierter darf, Organisator darf, Fremder bekommt 403 - PUT status mit formAnswers: formAnswers werden gespeichert - GET invitations: Gibt nur eingeladene Events zurueck, leeres Array wenn keine - OpenAPI-Schema: UpdateGuestStatus hat optionales formAnswers ## Akzeptanzkriterien - [ ] requireSelfOrOrganizer-Hook ist implementiert und getestet - [ ] Gast kann eigenen Guest-Status auf confirmed/declined aendern - [ ] Delegierter kann Status im Namen des Gasts aendern - [ ] Organisator kann weiterhin jeden Gast-Status aendern - [ ] GET /invitations gibt alle Events der Person zurueck - [ ] formAnswers kann mit dem Status-Update mitgesendet werden
Sign in to join this conversation.
No description provided.