# 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=`. - 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=` 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.