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>
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:
- 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.
- 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.
- 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:
- 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.
- 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.