2.4 KiB
2.4 KiB
Quickstart: Cancel Event
Feature Branch: 016-cancel-event
What This Feature Does
Adds the ability for an organizer to permanently cancel an event. Cancelled events display a red banner to visitors and block new RSVPs.
Implementation Scope
Backend
- Liquibase migration (003): Add
cancelled(boolean) andcancellation_reason(varchar 2000) columns toeventstable. - Domain model: Extend
Event.javawithcancelledandcancellationReasonfields +cancel()method. - JPA entity: Extend
EventJpaEntity.javawith matching columns and mapper updates. - OpenAPI spec: Add
PATCH /events/{eventToken}endpoint + extendGetEventResponsewith cancellation fields. - Use case: New
CancelEventUseCaseinterface + implementation inEventService. - Controller: Implement
cancelEventinEventController. - RSVP guard: Add cancelled check to RSVP creation (return 409).
Frontend
- Cancel bottom sheet: Add cancel button (organizer-only) + bottom sheet with textarea and confirm button in
EventDetailView.vue. - Cancellation banner: Red banner at top of event detail when
cancelled === true. - RSVP hiding: Hide
RsvpBarwhen event is cancelled. - API client: Use generated types from updated OpenAPI spec.
Testing
- Backend unit tests: Cancel use case, RSVP rejection on cancelled events.
- Backend integration tests: Full cancel flow via API.
- Frontend unit tests: Cancel bottom sheet, banner display, RSVP hiding.
- E2E tests: Organizer cancels event, attendee sees cancelled event.
Key Files to Modify
| File | Change |
|---|---|
backend/src/main/resources/openapi/api.yaml |
New endpoint + schema extensions |
backend/src/main/resources/db/changelog/ |
New changeset 003 |
backend/src/main/java/de/fete/domain/model/Event.java |
Add cancelled fields + cancel() |
backend/src/main/java/de/fete/adapter/out/persistence/EventJpaEntity.java |
Add columns |
backend/src/main/java/de/fete/application/service/EventService.java |
Implement cancel |
backend/src/main/java/de/fete/adapter/in/web/EventController.java |
Implement endpoint |
frontend/src/views/EventDetailView.vue |
Cancel button, bottom sheet, banner |
Prerequisites
- Existing RSVP bottom sheet pattern (already implemented)
- Organizer token stored in localStorage (already implemented)
BottomSheet.vuecomponent (already exists)