diff --git a/admin/openapi/api.json b/admin/openapi/api.json index 1aef014..0ac38b3 100644 --- a/admin/openapi/api.json +++ b/admin/openapi/api.json @@ -1 +1 @@ -{"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":{"200":{"description":""}},"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":{}},"CreateBookingDto":{"type":"object","properties":{}},"UpdateBookingDto":{"type":"object","properties":{}}}}} \ No newline at end of file +{"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":{"200":{"description":""}},"tags":["Calendar"]}},"/api/calendar/bookings/{eventId}/{startTime}":{"get":{"operationId":"CalendarController_getBookings","parameters":[{"name":"eventId","required":true,"in":"path","schema":{"type":"number"}},{"name":"startTime","required":true,"in":"path","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":""}},"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":{}},"CreateBookingDto":{"type":"object","properties":{}},"UpdateBookingDto":{"type":"object","properties":{}}}}} \ No newline at end of file diff --git a/admin/src/api/services/calendar.service.ts b/admin/src/api/services/calendar.service.ts index d1305e5..e2d28a0 100644 --- a/admin/src/api/services/calendar.service.ts +++ b/admin/src/api/services/calendar.service.ts @@ -152,4 +152,20 @@ export class CalendarService { return this.httpClient.patch(url, cancelBookingDto, requestOptions); } + + calendarControllerGetBookings(eventId: number, startTime: Date, observe?: 'body', options?: RequestOptions<'json'>): Observable; + calendarControllerGetBookings(eventId: number, startTime: Date, observe?: 'response', options?: RequestOptions<'json'>): Observable>; + calendarControllerGetBookings(eventId: number, startTime: Date, observe?: 'events', options?: RequestOptions<'json'>): Observable>; + calendarControllerGetBookings(eventId: number, startTime: Date, observe?: 'body' | 'events' | 'response', options?: RequestOptions<'arraybuffer' | 'blob' | 'json' | 'text'>): Observable { + const url = `${this.basePath}/api/calendar/bookings/${eventId}/${startTime}`; + + const requestOptions: any = { + observe: observe as any, + reportProgress: options?.reportProgress, + withCredentials: options?.withCredentials, + context: this.createContextWithClientId(options?.context) + }; + + return this.httpClient.get(url, requestOptions); + } } diff --git a/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.html b/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.html index 69e4b09..2d5b5a3 100644 --- a/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.html +++ b/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.html @@ -1,7 +1,11 @@

Foglalások

-@for ( booking of bookings.value();track booking){ -
- {{booking}} -
+@if (bookings.isLoading()) { +
loading...
+} @else { + @for (booking of bookings.value()?.items; track booking) { +
+ {{ booking }} +
+ } + } - diff --git a/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.ts b/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.ts index 94992c4..77e2831 100644 --- a/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.ts +++ b/admin/src/app/features/calendar/components/calendar-view/single-event-booking-list/single-event-booking-list.ts @@ -3,7 +3,7 @@ import { EventBusService } from '../../../../../services/event-bus.service'; import { CalendarEventDto } from '../../../models/events-in-range-dto.model'; import { CalendarService } from '../../../../../../api'; import { rxResource } from '@angular/core/rxjs-interop'; -import { of } from 'rxjs'; +import { delay, of } from 'rxjs'; import { Pagination } from '@rschneider/ng-daisyui'; @Component({ @@ -24,28 +24,32 @@ export class SingleEventBookingList { // bookings = toSignal(of(['a','b'])); pageSize = input(10); pageCount = computed(() => { - const bookings = this.bookings.value() ?? []; - let pageCount = Math.floor( bookings.length / this.pageSize()); - if ( (bookings.length % this.pageSize()) > 0){ - pageCount += 1; - } - pageCount = Math.max(pageCount ,1); - console.info("pageCount", pageCount); - return pageCount; + return this.bookings.value()?.pageCount || 1; }) bookings = rxResource( { - params: () => { + params: () => ({ page: this.activePage() - }, + }), stream: ({params}) => { + console.info("loading resource", params); const allData = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"] - const pageData = allData.slice(this.activePage()-1,this.activePage()+this.pageSize()) + + let pageCount = Math.floor( allData.length / this.pageSize()); + if ( (allData.length % this.pageSize()) > 0){ + pageCount += 1; + } + pageCount = Math.max(pageCount ,1); + + const pageData = allData.slice( ((this.activePage()-1) * this.pageSize()),this.activePage()*this.pageSize()); console.info("booking page data",pageData); - return of(pageData) + return of({ + items: pageData, + pageCount + }).pipe( delay(1000)) }, } diff --git a/server/src/calendar/calendar.controller.ts b/server/src/calendar/calendar.controller.ts index 03006f7..31e3aff 100644 --- a/server/src/calendar/calendar.controller.ts +++ b/server/src/calendar/calendar.controller.ts @@ -10,6 +10,7 @@ import { ParseIntPipe, UseGuards, ValidationPipe, + ParseDatePipe, } from '@nestjs/common'; import { CalendarService } from './calendar.service'; import { GetCalendarDto } from './dto/get-calendar.dto'; @@ -99,4 +100,17 @@ export class CalendarController { ) { return this.calendarService.cancelBooking(bookingId, cancelBookingDto); } + + @Get('bookings/:eventId/:startTime') + getBookings( + @User() user: types.AppUser, + @Param('eventId', ParseIntPipe) eventId: number, + @Param('startTime', new ParseDatePipe()) startTime: Date, + ) { + return this.calendarService.getBookings( + user.user!.userId, + eventId, + startTime, + ); + } } diff --git a/server/src/calendar/calendar.service.ts b/server/src/calendar/calendar.service.ts index 418b4d3..6f502fe 100644 --- a/server/src/calendar/calendar.service.ts +++ b/server/src/calendar/calendar.service.ts @@ -590,6 +590,31 @@ export class CalendarService { return this.bookingRepository.save(booking); } + async getBookings( + userId: number, + eventId: number, + startTime: Date, + ): Promise { + console.info('getBookings', userId, eventId, startTime); + await Promise.resolve(); + // const booking = await this.bookingRepository.findOneBy({ id: bookingId }); + // if (!booking) { + // throw new NotFoundException(`Booking with ID ${bookingId} not found.`); + // } + // if (booking.canceledAt) { + // throw new BadRequestException('This booking has already been cancelled.'); + // } + // + // // Update the booking with cancellation details + // booking.canceledAt = new Date(); + // booking.canceledReason = cancelBookingDto.canceledReason || null; + // booking.canceledByUserId = cancelBookingDto.canceledByUserId; + // + // return this.bookingRepository.save(booking); + + return []; + } + private isValidOccurrence(event: Event, occurrenceTime: Date): boolean { console.info( '[CalendarService] isValidOccurrence called with event:',