/** * @swagger * components: * schemas: * QuestionType: * type: string * enum: [SONG_PICK, SONG_RATING, FREE_TEXT] * Song: * type: object * required: [songId, title, position] * properties: * songId: * type: integer * example: 44 * title: * type: string * example: "Abendlied" * composer: * type: string * nullable: true * example: "Josef Rheinberger" * position: * type: integer * example: 0 * Question: * type: object * required: [eventQuestionId, questionId, type, label, position] * properties: * eventQuestionId: * type: integer * example: 12 * questionId: * type: integer * example: 5 * type: * $ref: '#/components/schemas/QuestionType' * label: * type: string * example: "Welches Stück hat Sie am meisten berührt?" * helpText: * type: string * nullable: true * position: * type: integer * example: 0 * EventSummary: * type: object * required: [slug, name, eventDate, feedbackDeadline] * properties: * slug: * type: string * example: "sommerkonzert-2026" * name: * type: string * example: "Sommerkonzert 2026" * subtitle: * type: string * nullable: true * eventDate: * type: string * format: date * feedbackDeadline: * type: string * format: date-time * posterImageUrl: * type: string * nullable: true * example: "https://www.nachklang.art/img/nk/image-20260727-214855-851.jpeg" * EventConfig: * allOf: * - $ref: '#/components/schemas/EventSummary' * - type: object * properties: * introText: * type: string * nullable: true * songs: * type: array * items: * $ref: '#/components/schemas/Song' * questions: * type: array * items: * $ref: '#/components/schemas/Question' * ProcessingError: * type: object * properties: * status: * type: string * example: PROCESSING_ERROR * message: * type: string * example: Internal Server Error. Try again later. * reference: * type: string * example: 6ec1361c-4175-4e81-b2ef-a0792a9a1dc3 */ export type QuestionType = 'SONG_PICK' | 'SONG_RATING' | 'FREE_TEXT'; export interface Song { songId: number; title: string; composer: string | null; position: number; } export interface Question { eventQuestionId: number; questionId: number; type: QuestionType; label: string; helpText: string | null; position: number; } export interface EventSummary { slug: string; name: string; subtitle: string | null; eventDate: string; feedbackDeadline: string; posterImageUrl: string | null; } export interface EventConfig extends EventSummary { introText: string | null; songs: Song[]; questions: Question[]; }