Files
nitrix 763811fce6
All checks were successful
CI / backend-test (push) Successful in 59s
CI / frontend-test (push) Successful in 23s
CI / frontend-e2e (push) Successful in 1m11s
CI / build-and-publish (push) Has been skipped
Add organizer-only attendee list to event detail view (011)
New GET /events/{token}/attendees endpoint returns attendee names when
a valid organizer token is provided (403 otherwise). The frontend
conditionally renders the list below the attendee count for organizers,
silently degrading for visitors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:34:27 +01:00

5.6 KiB

Feature Specification: View Attendee List

Feature Branch: 011-view-attendee-list Created: 2026-03-08 Status: Draft Input: User description: "der organisator soll die Teilnehmerliste einsehen können, wenn er sich die detail view eines eigenen events anschaut"

Clarifications

Session 2026-03-08

  • Q: API-Design — separater Endpoint oder bestehenden erweitern? → A: Separater Endpoint GET /events/{token}/attendees.
  • Q: Übermittlung des Organizer-Tokens? → A: Query-Parameter ?organizerToken=<uuid>.
  • Q: UI-Platzierung der Attendee-Liste auf der Detail-Seite? → A: Direkt unter dem bestehenden Attendee-Count (vor dem RSVP-Formular).

User Scenarios & Testing (mandatory)

User Story 1 - View Attendee List as Organizer (Priority: P1)

As the organizer of an event, I want to see a list of all attendees (people who RSVPed) when I view my event's detail page, so that I know who is coming.

When the organizer opens the event detail view for an event they created, the page displays a list of attendee names directly below the existing attendee count (before the RSVP form). This list is only visible to the organizer — regular visitors only see the attendee count (existing behavior).

Why this priority: This is the core feature. Without it, organizers have no way to see who signed up for their event.

Independent Test: Can be fully tested by creating an event, submitting RSVPs from other browsers/sessions, then viewing the event detail page with the organizer token. The attendee names should be listed.

Acceptance Scenarios:

  1. Given an organizer views their event with 3 RSVPs, When the detail page loads, Then the organizer sees a list showing all 3 attendee names.
  2. Given an organizer views their event with 0 RSVPs, When the detail page loads, Then the organizer sees an empty state message indicating no one has RSVPed yet.
  3. Given a regular visitor (non-organizer) views the same event, When the detail page loads, Then only the attendee count is shown — no individual names are visible.

User Story 2 - Attendee Count Label (Priority: P2)

As the organizer, I want the attendee list to show the total count alongside the names, so I can quickly see how many people are attending at a glance.

Why this priority: Enhances the organizer experience but the count is already visible in the existing detail view, so this is supplementary.

Independent Test: Can be tested by verifying the attendee count displayed next to/above the list matches the number of entries in the list.

Acceptance Scenarios:

  1. Given an organizer views their event with 5 RSVPs, When the attendee list is displayed, Then a heading or label shows "5 Attendees" (or equivalent) above the list.
  2. Given an organizer views their event with 1 RSVP, When the attendee list is displayed, Then the label uses singular form ("1 Attendee").

Edge Cases

  • What happens when the organizer token stored locally is invalid or belongs to a different event? The system treats the viewer as a regular visitor and shows the count only — no error is displayed.
  • What happens when an attendee name contains special characters or is very long? Names are displayed safely (escaped) and truncated visually if necessary.
  • What happens if a large number of attendees (e.g. 100+) have RSVPed? The list remains scrollable and performs well without pagination (events are expected to be small-to-medium scale).

Requirements (mandatory)

Functional Requirements

  • FR-001: System MUST provide a dedicated endpoint GET /events/{token}/attendees?organizerToken=<uuid> for organizers to retrieve the attendee list, separate from the public event detail endpoint.
  • FR-002: System MUST return each attendee's display name in the attendee list response.
  • FR-003: System MUST NOT expose individual attendee names to non-organizer visitors — only the aggregate count is shown (existing behavior preserved).
  • FR-004: The attendee list MUST be displayed directly below the attendee count on the event detail view (before the RSVP form) when the viewer is identified as the organizer.
  • FR-005: System MUST display an empty state message when no RSVPs exist for the event.
  • FR-006: System MUST display the total attendee count as a label alongside the attendee list.
  • FR-007: System MUST reject attendee list requests with an invalid or missing organizer token by returning HTTP 403 (no attendee data exposed; frontend degrades gracefully by not rendering the list).

Key Entities

  • Attendee (RSVP): A person who has RSVPed to an event. The organizer sees their display name in a list; visitors see only the aggregate count.

Success Criteria (mandatory)

Measurable Outcomes

  • SC-001: Organizers can see the full attendee name list within 2 seconds of opening their event detail page.
  • SC-002: Non-organizer visitors never see individual attendee names — only the count is visible.
  • SC-003: The attendee list correctly reflects all RSVPs submitted for the event, with no missing or duplicate entries.
  • SC-004: The feature works correctly on both mobile and desktop viewports.

Assumptions

  • The organizer is identified by having a valid organizer token stored on the client. No additional login or authentication mechanism is introduced.
  • The attendee list is read-only — the organizer cannot remove or edit attendees from this view.
  • Attendee names are displayed in the order they RSVPed (chronological).
  • The existing event detail view layout is extended, not replaced, to accommodate the attendee list section.