Files
fete/specs/016-cancel-event/quickstart.md
2026-03-12 19:03:57 +01:00

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

  1. Liquibase migration (003): Add cancelled (boolean) and cancellation_reason (varchar 2000) columns to events table.
  2. Domain model: Extend Event.java with cancelled and cancellationReason fields + cancel() method.
  3. JPA entity: Extend EventJpaEntity.java with matching columns and mapper updates.
  4. OpenAPI spec: Add PATCH /events/{eventToken} endpoint + extend GetEventResponse with cancellation fields.
  5. Use case: New CancelEventUseCase interface + implementation in EventService.
  6. Controller: Implement cancelEvent in EventController.
  7. RSVP guard: Add cancelled check to RSVP creation (return 409).

Frontend

  1. Cancel bottom sheet: Add cancel button (organizer-only) + bottom sheet with textarea and confirm button in EventDetailView.vue.
  2. Cancellation banner: Red banner at top of event detail when cancelled === true.
  3. RSVP hiding: Hide RsvpBar when event is cancelled.
  4. API client: Use generated types from updated OpenAPI spec.

Testing

  1. Backend unit tests: Cancel use case, RSVP rejection on cancelled events.
  2. Backend integration tests: Full cancel flow via API.
  3. Frontend unit tests: Cancel bottom sheet, banner display, RSVP hiding.
  4. 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.vue component (already exists)