{"openapi":"3.1.0","info":{"title":"Tanzschule Family & Friends API","description":"REST API for the Tanzschule Family & Friends web application","contact":{"name":"Tanzschule Family & Friends"},"version":"0.0.1-SNAPSHOT"},"servers":[{"url":"http://dance-school.fynn-koch.de","description":"Generated server url"}],"security":[{"Bearer Authentication":[]}],"tags":[{"name":"Course Categories","description":"Course category management"},{"name":"Contact","description":"Contact form"},{"name":"Gallery Events","description":"Gallery event and image management"},{"name":"FAQ","description":"Frequently asked questions management"},{"name":"Event Cleanup Config","description":"Configuration for automatic event cleanup"},{"name":"Events","description":"Event management"},{"name":"News","description":"News management"},{"name":"Course Registration","description":"Public course registration"},{"name":"Courses","description":"Course management"},{"name":"Authentication","description":"Admin login and JWT token generation"}],"paths":{"/api/news/{id}":{"get":{"tags":["News"],"summary":"Get news by ID","description":"Returns a single news entry by its ID","operationId":"getNewsById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsResponse"}}}}},"security":[]},"put":{"tags":["News"],"summary":"Update news","description":"Update an existing news entry (requires authentication)","operationId":"updateNews","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsResponse"}}}}}},"delete":{"tags":["News"],"summary":"Delete news","description":"Delete a news entry and its image (requires authentication)","operationId":"deleteNews","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/news/reorder":{"put":{"tags":["News"],"summary":"Reorder news","description":"Reorder news by providing a list of IDs in the desired order (requires authentication)","operationId":"reorderNews","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NewsResponse"}}}}}}}},"/api/gallery-events/{id}":{"get":{"tags":["Gallery Events"],"summary":"Get gallery event by ID","description":"Returns a single gallery event with its images","operationId":"getGalleryEventById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GalleryEventResponse"}}}}},"security":[]},"put":{"tags":["Gallery Events"],"summary":"Update gallery event","description":"Update an existing gallery event (requires authentication)","operationId":"updateGalleryEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GalleryEventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GalleryEventResponse"}}}}}},"delete":{"tags":["Gallery Events"],"summary":"Delete gallery event","description":"Delete a gallery event and all its images (requires authentication)","operationId":"deleteGalleryEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/gallery-events/{id}/images/reorder":{"put":{"tags":["Gallery Events"],"summary":"Reorder images in gallery event","description":"Reorder images by providing a list of IDs in the desired order (requires authentication)","operationId":"reorderGalleryImages","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageResponse"}}}}}}}},"/api/faqs/{id}":{"get":{"tags":["FAQ"],"summary":"Get FAQ by ID","description":"Returns a single FAQ by its ID","operationId":"getFaqById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqResponse"}}}}},"security":[]},"put":{"tags":["FAQ"],"summary":"Update FAQ","description":"Update an existing FAQ entry (requires authentication)","operationId":"updateFaq","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqResponse"}}}}}},"delete":{"tags":["FAQ"],"summary":"Delete FAQ","description":"Delete a FAQ entry (requires authentication)","operationId":"deleteFaq","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/faqs/reorder":{"put":{"tags":["FAQ"],"summary":"Reorder FAQs","description":"Reorder FAQs by providing a list of IDs in the desired order (requires authentication)","operationId":"reorderFaqs","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FaqResponse"}}}}}}}},"/api/events/{id}":{"get":{"tags":["Events"],"summary":"Get event by ID","description":"Returns a single event with its time ranges","operationId":"getEventById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}}}},"security":[]},"put":{"tags":["Events"],"summary":"Update event","description":"Update an existing event and its time ranges (requires authentication)","operationId":"updateEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}}}}},"delete":{"tags":["Events"],"summary":"Delete event","description":"Delete an event and all its time ranges (requires authentication)","operationId":"deleteEvent","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/event-cleanup-config":{"get":{"tags":["Event Cleanup Config"],"summary":"Get event cleanup config","description":"Returns whether the automatic cleanup of past events is enabled (requires authentication)","operationId":"getEventCleanupConfig","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCleanupConfigResponse"}}}}}},"put":{"tags":["Event Cleanup Config"],"summary":"Update event cleanup config","description":"Enable or disable automatic cleanup of past events (requires authentication)","operationId":"updateEventCleanupConfig","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCleanupConfigRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCleanupConfigResponse"}}}}}}},"/api/courses/{id}":{"get":{"tags":["Courses"],"summary":"Get course by ID","description":"Returns a single course with its tariffs","operationId":"getCourseById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseResponse"}}}}},"security":[]},"put":{"tags":["Courses"],"summary":"Update course","description":"Update an existing course and its tariffs (requires authentication)","operationId":"updateCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseResponse"}}}}}},"delete":{"tags":["Courses"],"summary":"Delete course","description":"Delete a course and all its tariffs (requires authentication)","operationId":"deleteCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/courses/reorder":{"put":{"tags":["Courses"],"summary":"Reorder courses","description":"Reorder courses by providing a list of IDs in the desired order (requires authentication)","operationId":"reorderCourses","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CourseResponse"}}}}}}}},"/api/course-categories/{id}":{"get":{"tags":["Course Categories"],"summary":"Get course category by ID","description":"Returns a single course category with its courses","operationId":"getCourseCategoryById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseCategoryResponse"}}}}},"security":[]},"put":{"tags":["Course Categories"],"summary":"Update course category","description":"Update an existing course category (requires authentication)","operationId":"updateCourseCategory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseCategoryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseCategoryResponse"}}}}}},"delete":{"tags":["Course Categories"],"summary":"Delete course category","description":"Delete a course category (requires authentication)","operationId":"deleteCourseCategory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/course-categories/reorder":{"put":{"tags":["Course Categories"],"summary":"Reorder course categories","description":"Reorder categories by providing a list of IDs in the desired order (requires authentication)","operationId":"reorderCourseCategories","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CourseCategoryResponse"}}}}}}}},"/api/news":{"get":{"tags":["News"],"summary":"Get all news","description":"Returns all news sorted by display order","operationId":"getAllNews","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NewsResponse"}}}}}},"security":[]},"post":{"tags":["News"],"summary":"Create news","description":"Create a new news entry (requires authentication)","operationId":"createNews","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsResponse"}}}}}}},"/api/news/{id}/image":{"post":{"tags":["News"],"summary":"Upload news image","description":"Upload or replace the image of a news entry (requires authentication)","operationId":"uploadNewsImage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageResponse"}}}}}},"delete":{"tags":["News"],"summary":"Delete news image","description":"Delete the image of a news entry (requires authentication)","operationId":"deleteNewsImage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/gallery-events":{"get":{"tags":["Gallery Events"],"summary":"Get all gallery events","description":"Returns all gallery events sorted by date descending","operationId":"getAllGalleryEvents","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GalleryEventResponse"}}}}}},"security":[]},"post":{"tags":["Gallery Events"],"summary":"Create gallery event","description":"Create a new gallery event (requires authentication)","operationId":"createGalleryEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GalleryEventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GalleryEventResponse"}}}}}}},"/api/gallery-events/{id}/images":{"post":{"tags":["Gallery Events"],"summary":"Upload images to gallery event","description":"Upload one or more images to a gallery event (requires authentication)","operationId":"uploadGalleryImages","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}}},"required":["files"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageResponse"}}}}}}}},"/api/faqs":{"get":{"tags":["FAQ"],"summary":"Get all FAQs","description":"Returns all FAQs sorted by display order","operationId":"getAllFaqs","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FaqResponse"}}}}}},"security":[]},"post":{"tags":["FAQ"],"summary":"Create FAQ","description":"Create a new FAQ entry (requires authentication)","operationId":"createFaq","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqResponse"}}}}}}},"/api/events":{"get":{"tags":["Events"],"summary":"Get all events","description":"Returns all events ordered by date","operationId":"getAllEvents","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventResponse"}}}}}},"security":[]},"post":{"tags":["Events"],"summary":"Create event","description":"Create a new event with time ranges (requires authentication)","operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}}}}}},"/api/courses":{"post":{"tags":["Courses"],"summary":"Create course","description":"Create a new course with tariffs (requires authentication)","operationId":"createCourse","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseResponse"}}}}}}},"/api/courses/{id}/register":{"post":{"tags":["Course Registration"],"summary":"Register for a course","description":"Submit a course registration form (public)","operationId":"registerForCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseRegistrationRequest"}}},"required":true},"responses":{"200":{"description":"OK"}},"security":[]}},"/api/course-categories":{"get":{"tags":["Course Categories"],"summary":"Get course categories","description":"Returns course categories with their courses, sorted by display order. Optionally filter by category IDs.","operationId":"getAllCourseCategories","parameters":[{"name":"ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CourseCategoryResponse"}}}}}},"security":[]},"post":{"tags":["Course Categories"],"summary":"Create course category","description":"Create a new course category (requires authentication)","operationId":"createCourseCategory","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseCategoryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseCategoryResponse"}}}}}}},"/api/contact":{"post":{"tags":["Contact"],"summary":"Send contact message","description":"Sends a contact form message via email (public)","operationId":"sendContactMessage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}},"required":true},"responses":{"200":{"description":"OK"}},"security":[]}},"/api/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Authenticate with username and password to receive a JWT token","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}},"security":[]}},"/api/news/{id}/image/download":{"get":{"tags":["News"],"summary":"Download news image","description":"Returns the image file for display or download","operationId":"downloadNewsImage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"security":[]}},"/api/gallery-events/{id}/images/{imageId}/download":{"get":{"tags":["Gallery Events"],"summary":"Download image","description":"Returns the image file for display or download","operationId":"downloadGalleryImage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"imageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"security":[]}},"/api/gallery-events/{id}/images/{imageId}":{"delete":{"tags":["Gallery Events"],"summary":"Delete image from gallery event","description":"Delete a single image from a gallery event (requires authentication)","operationId":"deleteGalleryImage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"imageId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}}},"components":{"schemas":{"NewsRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"displayOrder":{"type":"integer","format":"int32"}},"required":["description","displayOrder","title"]},"ImageResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"filename":{"type":"string"},"originalFilename":{"type":"string"},"contentType":{"type":"string"},"fileSize":{"type":"integer","format":"int64"},"displayOrder":{"type":"integer","format":"int32"},"galleryEventId":{"type":"string","format":"uuid"},"newsId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["contentType","createdAt","displayOrder","fileSize","filename","id","originalFilename","updatedAt"]},"NewsResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string"},"image":{"$ref":"#/components/schemas/ImageResponse"},"displayOrder":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["createdAt","description","displayOrder","id","title","updatedAt"]},"GalleryEventRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"date":{"type":"string","format":"date"}},"required":["date","name"]},"GalleryEventResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"date":{"type":"string","format":"date"},"images":{"type":"array","items":{"$ref":"#/components/schemas/ImageResponse"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["createdAt","date","id","images","name","updatedAt"]},"FaqRequest":{"type":"object","properties":{"question":{"type":"string","minLength":1},"answer":{"type":"string","minLength":1},"displayOrder":{"type":"integer","format":"int32"}},"required":["answer","displayOrder","question"]},"FaqResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"question":{"type":"string"},"answer":{"type":"string"},"displayOrder":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["answer","createdAt","displayOrder","id","question","updatedAt"]},"EventRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"date":{"type":"string","format":"date"},"entryCost":{"type":"number"},"entryCostWithCustomerCard":{"type":"number"},"remark":{"type":"string"},"timeRanges":{"type":"array","items":{"$ref":"#/components/schemas/EventTimeRangeRequest"}}},"required":["date","name"]},"EventTimeRangeRequest":{"type":"object","properties":{"startTime":{"type":"string"},"endTime":{"type":"string"}},"required":["endTime","startTime"]},"EventResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"date":{"type":"string","format":"date"},"entryCost":{"type":"number"},"entryCostWithCustomerCard":{"type":"number"},"remark":{"type":"string"},"timeRanges":{"type":"array","items":{"$ref":"#/components/schemas/EventTimeRangeResponse"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["createdAt","date","id","name","timeRanges","updatedAt"]},"EventTimeRangeResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"startTime":{"type":"string"},"endTime":{"type":"string"},"eventId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["createdAt","endTime","eventId","id","startTime","updatedAt"]},"EventCleanupConfigRequest":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"EventCleanupConfigResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["createdAt","enabled","id","updatedAt"]},"CourseRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"startTime":{"type":"string"},"endTime":{"type":"string"},"numberOfHours":{"type":"string","minLength":1},"teacher":{"type":"string","minLength":1},"remark":{"type":"string"},"partnerOption":{"type":"boolean"},"categoryId":{"type":"string","format":"uuid"},"tariffs":{"type":"array","items":{"$ref":"#/components/schemas/CourseTariffRequest"}}},"required":["categoryId","endTime","name","numberOfHours","partnerOption","startDate","startTime","teacher"]},"CourseTariffRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"price":{"type":"number"}},"required":["name","price"]},"CourseResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"startDate":{"type":"string","format":"date"},"startTime":{"type":"string"},"endTime":{"type":"string"},"numberOfHours":{"type":"string"},"teacher":{"type":"string"},"remark":{"type":"string"},"partnerOption":{"type":"boolean"},"displayOrder":{"type":"integer","format":"int32"},"categoryId":{"type":"string","format":"uuid"},"tariffs":{"type":"array","items":{"$ref":"#/components/schemas/CourseTariffResponse"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["categoryId","createdAt","displayOrder","endTime","id","name","numberOfHours","partnerOption","startDate","startTime","tariffs","teacher","updatedAt"]},"CourseTariffResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"price":{"type":"number"},"courseId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["courseId","createdAt","id","name","price","updatedAt"]},"CourseCategoryRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"displayOrder":{"type":"integer","format":"int32"}},"required":["displayOrder","name"]},"CourseCategoryResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"displayOrder":{"type":"integer","format":"int32"},"courses":{"type":"array","items":{"$ref":"#/components/schemas/CourseResponse"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["courses","createdAt","displayOrder","id","name","updatedAt"]},"CourseRegistrationRequest":{"type":"object","properties":{"salutation":{"type":"string","minLength":1},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"birthDate":{"type":"string","minLength":1},"street":{"type":"string","minLength":1},"city":{"type":"string","minLength":1},"phone":{"type":"string","minLength":1},"mobile":{"type":"string"},"email":{"type":"string","format":"email","minLength":1},"remark":{"type":"string"},"tariffName":{"type":"string","minLength":1},"withPartner":{"type":"boolean"},"partnerSalutation":{"type":"string"},"partnerFirstName":{"type":"string"},"partnerLastName":{"type":"string"},"partnerBirthDate":{"type":"string"},"partnerStreet":{"type":"string"},"partnerCity":{"type":"string"},"partnerPhone":{"type":"string"},"partnerMobile":{"type":"string"},"partnerEmail":{"type":"string","format":"email"},"directDebit":{"type":"boolean"},"accountHolder":{"type":"string"},"iban":{"type":"string"},"bic":{"type":"string"},"samePaymentDetails":{"type":"boolean"},"partnerAccountHolder":{"type":"string"},"partnerIban":{"type":"string"},"partnerBic":{"type":"string"}},"required":["birthDate","city","directDebit","email","firstName","lastName","phone","salutation","street","tariffName","withPartner"]},"ContactRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"email":{"type":"string","format":"email","minLength":1},"phone":{"type":"string"},"message":{"type":"string","minLength":1}},"required":["email","message","name"]},"LoginRequest":{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1}},"required":["password","username"]},"LoginResponse":{"type":"object","properties":{"token":{"type":"string"},"username":{"type":"string"}},"required":["token","username"]}},"securitySchemes":{"Bearer Authentication":{"type":"http","description":"Enter your JWT token","name":"Bearer Authentication","scheme":"bearer","bearerFormat":"JWT"}}}}