Spec, research, data model, API contract, implementation plan, and task breakdown for the public event detail page. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
95 lines
2.7 KiB
YAML
95 lines
2.7 KiB
YAML
# OpenAPI contract addition for GET /events/{token}
|
|
# To be merged into backend/src/main/resources/openapi/api.yaml
|
|
|
|
paths:
|
|
/events/{token}:
|
|
get:
|
|
operationId: getEvent
|
|
summary: Get public event details by token
|
|
tags:
|
|
- events
|
|
parameters:
|
|
- name: token
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
description: Public event token
|
|
responses:
|
|
"200":
|
|
description: Event found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/GetEventResponse"
|
|
"404":
|
|
description: Event not found
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: "#/components/schemas/ProblemDetail"
|
|
|
|
components:
|
|
schemas:
|
|
GetEventResponse:
|
|
type: object
|
|
required:
|
|
- eventToken
|
|
- title
|
|
- dateTime
|
|
- timezone
|
|
- attendeeCount
|
|
- expired
|
|
properties:
|
|
eventToken:
|
|
type: string
|
|
format: uuid
|
|
description: Public event token
|
|
example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
|
|
title:
|
|
type: string
|
|
description: Event title
|
|
example: "Summer BBQ"
|
|
description:
|
|
type: string
|
|
description: Event description (absent if not set)
|
|
example: "Bring your own drinks!"
|
|
dateTime:
|
|
type: string
|
|
format: date-time
|
|
description: Event date/time with organizer's UTC offset
|
|
example: "2026-03-15T20:00:00+01:00"
|
|
timezone:
|
|
type: string
|
|
description: IANA timezone name of the organizer
|
|
example: "Europe/Berlin"
|
|
location:
|
|
type: string
|
|
description: Event location (absent if not set)
|
|
example: "Central Park, NYC"
|
|
attendeeCount:
|
|
type: integer
|
|
minimum: 0
|
|
description: Number of confirmed attendees (attending=true)
|
|
example: 12
|
|
expired:
|
|
type: boolean
|
|
description: Whether the event's expiry date has passed
|
|
example: false
|
|
|
|
# Modification to existing CreateEventRequest — add timezone field
|
|
# CreateEventRequest (additions):
|
|
# timezone:
|
|
# type: string
|
|
# description: IANA timezone of the organizer
|
|
# example: "Europe/Berlin"
|
|
# (make required)
|
|
|
|
# Modification to existing CreateEventResponse — add timezone field
|
|
# CreateEventResponse (additions):
|
|
# timezone:
|
|
# type: string
|
|
# description: IANA timezone of the organizer
|
|
# example: "Europe/Berlin"
|