# Quickstart: View Attendee List (011) ## Prerequisites - Java 25 (SDKMAN) - Node.js 20+ / npm - PostgreSQL running (or Docker for Testcontainers) ## Development Flow ### 1. Update OpenAPI spec Edit `backend/src/main/resources/openapi/api.yaml` to add the `GET /events/{token}/attendees` endpoint and response schemas (see `contracts/api.md`). ### 2. Generate types ```bash # Backend: regenerate Spring interfaces cd backend && ./mvnw compile # Frontend: regenerate TypeScript types cd frontend && npm run generate:api ``` ### 3. Backend implementation (TDD) ```bash # Write tests first cd backend && ./mvnw test # Run specific test class cd backend && ./mvnw test -Dtest=EventControllerIntegrationTest cd backend && ./mvnw test -Dtest=RsvpServiceTest ``` ### 4. Frontend implementation (TDD) ```bash # Unit tests cd frontend && npm run test:unit # E2E tests cd frontend && npx playwright test e2e/view-attendee-list.spec.ts ``` ### 5. Verify ```bash # Backend full verify (includes checkstyle) cd backend && ./mvnw verify # Frontend build check cd frontend && npm run build ``` ## Key Files to Modify | Layer | File | Change | |-------|------|--------| | API Spec | `backend/src/main/resources/openapi/api.yaml` | Add endpoint + schemas | | Port (in) | `de.fete.domain.port.in.GetAttendeesUseCase` | New interface | | Port (out) | `de.fete.domain.port.out.RsvpRepository` | Add `findByEventId` | | Service | `de.fete.application.service.RsvpService` | Implement use case | | Persistence | `de.fete.adapter.out.persistence.RsvpJpaRepository` | Add query method | | Persistence | `de.fete.adapter.out.persistence.RsvpPersistenceAdapter` | Implement port method | | Controller | `de.fete.adapter.in.web.EventController` | Add endpoint handler | | Frontend | `src/views/EventDetailView.vue` | Integrate AttendeeList | | Frontend | `src/components/AttendeeList.vue` | New component | ## Testing Checklist - [ ] Backend unit test: `RsvpService.getAttendeeNames` — valid token, invalid token, no RSVPs - [ ] Backend integration test: `GET /events/{token}/attendees` — 200, 403, 404 - [ ] Frontend unit test: `AttendeeList.vue` — renders names, empty state, loading - [ ] Frontend unit test: `EventDetailView.vue` — shows list for organizer, hides for visitor - [ ] E2E test: organizer sees attendee names, visitor sees count only