{"openapi":"3.0.0","paths":{"/api":{"get":{"operationId":"AppController_getHello","parameters":[],"responses":{"200":{"description":""}},"tags":["App"]}},"/api/user":{"post":{"operationId":"UserController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":""}},"tags":["User"]},"get":{"operationId":"UserController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["User"]}},"/api/user/search":{"get":{"operationId":"UserController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["User"]}},"/api/user/{id}":{"get":{"operationId":"UserController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["User"]},"patch":{"operationId":"UserController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":""}},"tags":["User"]},"delete":{"operationId":"UserController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["User"]}},"/api/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequestDto"}}}},"responses":{"201":{"description":""}},"tags":["Auth"]}},"/api/auth/logout":{"post":{"operationId":"AuthController_logout","parameters":[],"responses":{"201":{"description":""}},"tags":["Auth"]}},"/api/auth/refresh":{"post":{"operationId":"AuthController_refresh","parameters":[],"responses":{"201":{"description":""}},"tags":["Auth"]}},"/api/event-type":{"post":{"operationId":"EventTypesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventTypeDto"}}}},"responses":{"201":{"description":""}},"tags":["EventTypes"]},"get":{"operationId":"EventTypesController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["EventTypes"]}},"/api/event-type/search":{"get":{"operationId":"EventTypesController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["EventTypes"]}},"/api/event-type/{id}":{"get":{"operationId":"EventTypesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["EventTypes"]},"patch":{"operationId":"EventTypesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventTypeDto"}}}},"responses":{"200":{"description":""}},"tags":["EventTypes"]},"delete":{"operationId":"EventTypesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["EventTypes"]}},"/api/products":{"post":{"operationId":"ProductsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProductDto"}}}},"responses":{"201":{"description":""}},"tags":["Products"]},"get":{"operationId":"ProductsController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["Products"]}},"/api/products/search":{"get":{"operationId":"ProductsController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Products"]}},"/api/products/{id}":{"get":{"operationId":"ProductsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Products"]},"patch":{"operationId":"ProductsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProductDto"}}}},"responses":{"200":{"description":""}},"tags":["Products"]},"delete":{"operationId":"ProductsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Products"]}},"/api/events":{"post":{"operationId":"EventsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventDto"}}}},"responses":{"201":{"description":""}},"tags":["Events"]},"get":{"operationId":"EventsController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["Events"]}},"/api/events/search":{"get":{"operationId":"EventsController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Events"]}},"/api/events/{id}":{"get":{"operationId":"EventsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Events"]},"patch":{"operationId":"EventsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventDto"}}}},"responses":{"200":{"description":""}},"tags":["Events"]},"delete":{"operationId":"EventsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Events"]}},"/api/user-group":{"post":{"operationId":"UserGroupsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserGroupDto"}}}},"responses":{"201":{"description":""}},"tags":["UserGroups"]},"get":{"operationId":"UserGroupsController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["UserGroups"]}},"/api/user-group/search":{"get":{"operationId":"UserGroupsController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["UserGroups"]}},"/api/user-group/{id}":{"get":{"operationId":"UserGroupsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["UserGroups"]},"patch":{"operationId":"UserGroupsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserGroupDto"}}}},"responses":{"200":{"description":""}},"tags":["UserGroups"]},"delete":{"operationId":"UserGroupsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["UserGroups"]}},"/api/user-role":{"post":{"operationId":"UserRolesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRoleDto"}}}},"responses":{"201":{"description":""}},"tags":["UserRoles"]},"get":{"operationId":"UserRolesController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["UserRoles"]}},"/api/user-role/search":{"get":{"operationId":"UserRolesController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["UserRoles"]}},"/api/user-role/{id}":{"get":{"operationId":"UserRolesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["UserRoles"]},"patch":{"operationId":"UserRolesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleDto"}}}},"responses":{"200":{"description":""}},"tags":["UserRoles"]},"delete":{"operationId":"UserRolesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["UserRoles"]}},"/api/recurrence-rules":{"post":{"operationId":"RecurrenceRulesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecurrenceRuleDto"}}}},"responses":{"201":{"description":""}},"tags":["RecurrenceRules"]},"get":{"operationId":"RecurrenceRulesController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["RecurrenceRules"]}},"/api/recurrence-rules/search":{"get":{"operationId":"RecurrenceRulesController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["RecurrenceRules"]}},"/api/recurrence-rules/{id}":{"get":{"operationId":"RecurrenceRulesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["RecurrenceRules"]},"patch":{"operationId":"RecurrenceRulesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRecurrenceRuleDto"}}}},"responses":{"200":{"description":""}},"tags":["RecurrenceRules"]},"delete":{"operationId":"RecurrenceRulesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["RecurrenceRules"]}},"/api/event-exceptions":{"post":{"operationId":"EventExceptionsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventExceptionDto"}}}},"responses":{"201":{"description":""}},"tags":["EventExceptions"]},"get":{"operationId":"EventExceptionsController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["EventExceptions"]}},"/api/event-exceptions/search":{"get":{"operationId":"EventExceptionsController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["EventExceptions"]}},"/api/event-exceptions/{id}":{"get":{"operationId":"EventExceptionsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["EventExceptions"]},"patch":{"operationId":"EventExceptionsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventExceptionDto"}}}},"responses":{"200":{"description":""}},"tags":["EventExceptions"]},"delete":{"operationId":"EventExceptionsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["EventExceptions"]}},"/api/calendar":{"get":{"operationId":"CalendarController_getCalendarEvents","parameters":[],"responses":{"200":{"description":""}},"tags":["Calendar"]}},"/api/calendar/events":{"post":{"operationId":"CalendarController_createEvent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventDto"}}}},"responses":{"201":{"description":""}},"tags":["Calendar"]}},"/api/calendar/events/{id}":{"get":{"operationId":"CalendarController_getEventById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Calendar"]},"patch":{"operationId":"CalendarController_updateEvent","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventDto"}}}},"responses":{"200":{"description":""}},"tags":["Calendar"]},"delete":{"operationId":"CalendarController_deleteEvent","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Calendar"]}},"/api/calendar/events/{id}/exceptions":{"post":{"operationId":"CalendarController_createException","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExceptionDto"}}}},"responses":{"201":{"description":""}},"tags":["Calendar"]}},"/api/calendar/events/{id}/bookings":{"post":{"operationId":"CalendarController_createBooking","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarCreateBookingDto"}}}},"responses":{"201":{"description":""}},"tags":["Calendar"]}},"/api/calendar/bookings/{bookingId}/cancel":{"patch":{"operationId":"CalendarController_cancelBooking","parameters":[{"name":"bookingId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelBookingDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalenderControllerGetBookingResponse"}}}}},"tags":["Calendar"]}},"/api/calendar/bookings/{eventId}":{"get":{"operationId":"CalendarController_getBookings","parameters":[{"name":"eventId","required":true,"in":"path","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"default":"startTime","type":"string"}},{"name":"order","required":false,"in":"query","description":"Sort order","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"startTime","required":true,"in":"query","description":"The start time for the event occurrence (ISO 8601 string)","schema":{"example":"2023-10-27T10:00:00.000Z","type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalenderControllerGetBookingResponse"}}}}},"tags":["Calendar"]}},"/api/bookings":{"post":{"operationId":"BookingsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBookingDto"}}}},"responses":{"201":{"description":""}},"tags":["Bookings"]},"get":{"operationId":"BookingsController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["Bookings"]}},"/api/bookings/search":{"get":{"operationId":"BookingsController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Bookings"]}},"/api/bookings/{id}":{"get":{"operationId":"BookingsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Bookings"]},"patch":{"operationId":"BookingsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBookingDto"}}}},"responses":{"200":{"description":""}},"tags":["Bookings"]},"delete":{"operationId":"BookingsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Bookings"]}},"/api/ping":{"get":{"operationId":"PingController_ping","parameters":[],"responses":{"200":{"description":""}},"tags":["Ping"]}},"/api/ping/auth":{"get":{"operationId":"PingController_pingAuth","parameters":[],"responses":{"200":{"description":""}},"tags":["Ping"]}}},"info":{"title":"DV Booking API","description":"The DV Booking API description","version":"1.0","contact":{}},"tags":[{"name":"dvbooking","description":""}],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","name":"JWT","description":"Enter JWT token","in":"header"}},"schemas":{"CreateUserDto":{"type":"object","properties":{"username":{"type":"string"},"email":{"type":"string"},"password":{"type":"string"}},"required":["username","email","password"]},"UpdateUserDto":{"type":"object","properties":{"username":{"type":"string"},"email":{"type":"string"},"password":{"type":"string"}},"required":["username","email","password"]},"LoginRequestDto":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"}},"required":["username","password"]},"CreateEventTypeDto":{"type":"object","properties":{}},"UpdateEventTypeDto":{"type":"object","properties":{}},"CreateProductDto":{"type":"object","properties":{}},"UpdateProductDto":{"type":"object","properties":{}},"CreateEventDto":{"type":"object","properties":{}},"UpdateEventDto":{"type":"object","properties":{}},"CreateUserGroupDto":{"type":"object","properties":{}},"UpdateUserGroupDto":{"type":"object","properties":{}},"CreateUserRoleDto":{"type":"object","properties":{}},"UpdateUserRoleDto":{"type":"object","properties":{}},"CreateRecurrenceRuleDto":{"type":"object","properties":{}},"UpdateRecurrenceRuleDto":{"type":"object","properties":{}},"CreateEventExceptionDto":{"type":"object","properties":{}},"UpdateEventExceptionDto":{"type":"object","properties":{}},"CreateExceptionDto":{"type":"object","properties":{}},"CalendarCreateBookingDto":{"type":"object","properties":{"occurrenceStartTime":{"format":"date-time","type":"string"},"userId":{"type":"number"},"reservedSeatsCount":{"type":"number"},"notes":{"type":"string"}},"required":["occurrenceStartTime","userId","reservedSeatsCount","notes"]},"CancelBookingDto":{"type":"object","properties":{"canceledReason":{"type":"string"}},"required":["canceledReason"]},"UserResponseDto":{"type":"object","properties":{"id":{"type":"number"},"username":{"type":"string"}},"required":["id","username"]},"BookingResponseDto":{"type":"object","properties":{"id":{"type":"number"},"eventId":{"type":"number"},"occurrenceStartTime":{"format":"date-time","type":"string"},"notes":{"type":"string"},"reservedSeatsCount":{"type":"number"},"canceledAt":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true},"user":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/UserResponseDto"}]},"status":{"type":"string"}},"required":["id","eventId","occurrenceStartTime","reservedSeatsCount","canceledAt","createdAt","user"]},"PaginationResponseMetaDto":{"type":"object","properties":{"totalItems":{"type":"number"},"itemCount":{"type":"number"},"itemsPerPage":{"type":"number"},"totalPages":{"type":"number"},"currentPage":{"type":"number"}},"required":["totalItems","itemCount","itemsPerPage","totalPages","currentPage"]},"CalenderControllerGetBookingResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BookingResponseDto"}},"meta":{"$ref":"#/components/schemas/PaginationResponseMetaDto"}},"required":["data","meta"]},"CreateBookingDto":{"type":"object","properties":{}},"UpdateBookingDto":{"type":"object","properties":{}}}}}