From bde53c48c1390a8fad4a6c17b1af0e9977a15978 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 13 Jan 2026 21:48:35 +0000 Subject: [PATCH 1/2] feat: Extend Swagger Coverage for controller OAuth2SummitLocationsApiController Signed-off-by: Matias Perrone --- .../OAuth2SummitLocationsApiController.php | 1232 ++++++++++++++++- .../Traits/SummitBookableVenueRoomApi.php | 370 ++++- .../Models/SummitAbstractLocationSchema.php | 35 + app/Swagger/Models/SummitAirportSchema.php | 25 + ...VenueRoomAttributeValueExpandedSchema.php} | 14 +- ...tBookableVenueRoomAttributeValueSchema.php | 22 + .../Models/SummitBookableVenueRoomSchema.php | 32 + .../Models/SummitExternalLocationSchema.php | 25 + .../Models/SummitGeoLocatedLocationSchema.php | 48 + app/Swagger/Models/SummitHotelSchema.php | 27 + .../Models/SummitLocationBannerSchema.php | 26 + .../Models/SummitLocationImageSchema.php | 26 + .../Models/SummitLocationMapSchema.php | 26 + .../Models/SummitRoomReservationSchema.php | 47 + app/Swagger/Models/SummitVenueFloorSchema.php | 36 + app/Swagger/Models/SummitVenueRoomSchema.php | 40 + app/Swagger/Models/SummitVenueSchema.php | 37 + ...th2SummitLocationsApiControllerSchemas.php | 639 +++++++++ app/Swagger/Security/LocationsAuthSchema.php | 30 + 19 files changed, 2721 insertions(+), 16 deletions(-) create mode 100644 app/Swagger/Models/SummitAbstractLocationSchema.php create mode 100644 app/Swagger/Models/SummitAirportSchema.php rename app/Swagger/{SummitLocationsAttributeValuesSchemas.php => Models/SummitBookableVenueRoomAttributeValueExpandedSchema.php} (58%) create mode 100644 app/Swagger/Models/SummitBookableVenueRoomAttributeValueSchema.php create mode 100644 app/Swagger/Models/SummitBookableVenueRoomSchema.php create mode 100644 app/Swagger/Models/SummitExternalLocationSchema.php create mode 100644 app/Swagger/Models/SummitGeoLocatedLocationSchema.php create mode 100644 app/Swagger/Models/SummitHotelSchema.php create mode 100644 app/Swagger/Models/SummitLocationBannerSchema.php create mode 100644 app/Swagger/Models/SummitLocationImageSchema.php create mode 100644 app/Swagger/Models/SummitLocationMapSchema.php create mode 100644 app/Swagger/Models/SummitRoomReservationSchema.php create mode 100644 app/Swagger/Models/SummitVenueFloorSchema.php create mode 100644 app/Swagger/Models/SummitVenueRoomSchema.php create mode 100644 app/Swagger/Models/SummitVenueSchema.php create mode 100644 app/Swagger/OAuth2SummitLocationsApiControllerSchemas.php create mode 100644 app/Swagger/Security/LocationsAuthSchema.php diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php index dca66a40b..0d53ba84e 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php @@ -1,4 +1,5 @@ - [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: class_name, name, description, address_1, address_2, zip_code, city, state, country, sold_out, is_main', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, name, order', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocationPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getLocations($summit_id) { @@ -212,6 +239,28 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues', + summary: 'Get all venues for a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: name, rooms_name, rooms_floor_name, floors_name, description, address_1, address_2, zip_code, city, state, country, sold_out, is_main', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, name, order', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenuePaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getVenues($summit_id) { @@ -281,6 +330,28 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { ); } + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues/rooms/all', + summary: 'Get all venue rooms for a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: name, floor_name, venue_name, description', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, name, order, venue_name, floor_name', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoomPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getAllVenuesRooms($summit_id){ $summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id); @@ -335,6 +406,24 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/external-locations', + summary: 'Get all external locations for a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitExternalLocationPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getExternalLocations($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -370,6 +459,24 @@ public function getExternalLocations($summit_id) * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/hotels', + summary: 'Get all hotels for a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitHotelPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getHotels($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -404,6 +511,24 @@ public function getHotels($summit_id) * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/airports', + summary: 'Get all airports for a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAirportPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getAirports($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -440,9 +565,28 @@ public function getAirports($summit_id) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/{location_id}', + summary: 'Get a specific location by ID', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + ] + )] public function getLocation($summit_id, $location_id) { - return $this->processRequest(function () use ($summit_id, $location_id) { + return $this->processRequest(function() use($summit_id, $location_id) { $summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); @@ -558,6 +702,29 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($location) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/{location_id}/events', + summary: 'Get events for a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID or "tbd"', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: title, start_date, end_date, speaker, tags, event_type_id, track_id, type_show_always_on_schedule', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: title, start_date, end_date, id, created, track_id', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitEventPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + ] + )] public function getLocationEvents($summit_id, $location_id) { return $this->_getLocationEvents($summit_id, $location_id, false); @@ -568,6 +735,29 @@ public function getLocationEvents($summit_id, $location_id) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/{location_id}/events/published', + summary: 'Get published events for a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID or "tbd"', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: title, start_date, end_date, speaker, tags, event_type_id, track_id, type_show_always_on_schedule', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: title, start_date, end_date, id, created, track_id', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitEventPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + ] + )] public function getLocationPublishedEvents($summit_id, $location_id) { return $this->_getLocationEvents($summit_id, $location_id, true); @@ -577,6 +767,28 @@ public function getLocationPublishedEvents($summit_id, $location_id) * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/metadata', + summary: 'Get location metadata for a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(type: 'object')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getMetadata($summit_id) { $summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id); @@ -594,6 +806,26 @@ public function getMetadata($summit_id) * @param $floor_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}', + summary: 'Get a venue floor by ID', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + ] + )] public function getVenueFloor($summit_id, $venue_id, $floor_id) { return $this->processRequest(function() use($summit_id, $venue_id, $floor_id){ @@ -632,6 +864,26 @@ public function getVenueFloor($summit_id, $venue_id, $floor_id) * @param $room_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}', + summary: 'Get a venue room by ID', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + ] + )] public function getVenueRoom($summit_id, $venue_id, $room_id) { return $this->processRequest(function() use($summit_id, $venue_id, $room_id){ @@ -670,6 +922,27 @@ public function getVenueRoom($summit_id, $venue_id, $room_id) * @param $room_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/rooms/{room_id}', + summary: 'Get a room on a specific floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor, or room not found'), + ] + )] public function getVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) { return $this->processRequest(function() use($summit_id, $venue_id, $floor_id , $room_id){ @@ -717,6 +990,33 @@ public function getVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations', + summary: 'Add a new location to a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddLocationPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Location created', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addLocation($summit_id) { return $this->processRequest(function() use($summit_id){ @@ -741,6 +1041,33 @@ public function addLocation($summit_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues', + summary: 'Add a new venue to a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Venue payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenuePayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Venue created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenue')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenue($summit_id) { return $this->processRequest(function() use($summit_id){ @@ -766,6 +1093,33 @@ public function addVenue($summit_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/external-locations', + summary: 'Add a new external location to a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'External location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddExternalLocationPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'External location created', content: new OA\JsonContent(ref: '#/components/schemas/SummitExternalLocation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addExternalLocation($summit_id) { return $this->processRequest(function() use($summit_id){ @@ -792,6 +1146,33 @@ public function addExternalLocation($summit_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/hotels', + summary: 'Add a new hotel to a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Hotel payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddHotelPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Hotel created', content: new OA\JsonContent(ref: '#/components/schemas/SummitHotel')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addHotel($summit_id) { return $this->processRequest(function() use($summit_id){ @@ -817,6 +1198,33 @@ public function addHotel($summit_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/airports', + summary: 'Add a new airport to a summit', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Airport payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddAirportPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Airport created', content: new OA\JsonContent(ref: '#/components/schemas/SummitAirport')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addAirport($summit_id) { return $this->processRequest(function() use($summit_id){ @@ -844,6 +1252,34 @@ public function addAirport($summit_id) * @param $venue_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors', + summary: 'Add a new floor to a venue', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Floor payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenueFloorPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Floor created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueFloor($summit_id, $venue_id) { return $this->processRequest(function() use($summit_id, $venue_id){ @@ -871,6 +1307,34 @@ public function addVenueFloor($summit_id, $venue_id) * @param $venue_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms', + summary: 'Add a new room to a venue', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenueRoomPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueRoom($summit_id, $venue_id) { return $this->processRequest(function() use($summit_id, $venue_id){ @@ -896,6 +1360,35 @@ public function addVenueRoom($summit_id, $venue_id) * @param $venue_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/rooms', + summary: 'Add a new room to a venue floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenueFloorRoomPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueFloorRoom($summit_id, $venue_id, $floor_id) { return $this->processRequest(function() use($summit_id, $venue_id, $floor_id){ @@ -928,6 +1421,34 @@ public function addVenueFloorRoom($summit_id, $venue_id, $floor_id) * @param $location_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/{location_id}', + summary: 'Update a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateLocationPayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Location updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateLocation($summit_id, $location_id) { return $this->processRequest(function() use($summit_id, $location_id){ @@ -954,6 +1475,34 @@ public function updateLocation($summit_id, $location_id) * @param $venue_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}', + summary: 'Update a venue', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Venue payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenuePayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Venue updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenue')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateVenue($summit_id, $venue_id) { return $this->processRequest(function() use($summit_id, $venue_id){ @@ -982,6 +1531,35 @@ public function updateVenue($summit_id, $venue_id) * @param $floor_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}', + summary: 'Update a venue floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Floor payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenueFloorPayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Floor updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateVenueFloor($summit_id, $venue_id, $floor_id) { return $this->processRequest(function() use($summit_id, $venue_id, $floor_id){ @@ -1012,6 +1590,35 @@ public function updateVenueFloor($summit_id, $venue_id, $floor_id) * @param $room_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}', + summary: 'Update a venue room', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenueRoomPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateVenueRoom($summit_id, $venue_id, $room_id) { return $this->processRequest(function() use($summit_id, $venue_id, $room_id){ @@ -1040,6 +1647,36 @@ public function updateVenueRoom($summit_id, $venue_id, $room_id) * @param $room_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/rooms/{room_id}', + summary: 'Update a room on a specific floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenueFloorRoomPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor, or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) { return $this->processRequest(function() use($summit_id, $venue_id, $floor_id, $room_id){ @@ -1069,6 +1706,34 @@ public function updateVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) * @param $hotel_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/hotels/{hotel_id}', + summary: 'Update a hotel', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'hotel_id', in: 'path', required: true, description: 'Hotel ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Hotel payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateHotelPayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Hotel updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitHotel')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or hotel not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateHotel($summit_id, $hotel_id) { return $this->processRequest(function() use($summit_id, $hotel_id){ @@ -1095,6 +1760,34 @@ public function updateHotel($summit_id, $hotel_id) * @param $airport_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/airports/{airport_id}', + summary: 'Update an airport', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'airport_id', in: 'path', required: true, description: 'Airport ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Airport payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateAirportPayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Airport updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitAirport')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or airport not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateAirport($summit_id, $airport_id) { return $this->processRequest(function() use($summit_id, $airport_id){ @@ -1121,6 +1814,34 @@ public function updateAirport($summit_id, $airport_id) * @param $external_location_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/external-locations/{external_location_id}', + summary: 'Update an external location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'external_location_id', in: 'path', required: true, description: 'External location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'External location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateExternalLocationPayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'External location updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitExternalLocation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or external location not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateExternalLocation($summit_id, $external_location_id) { return $this->processRequest(function() use($summit_id, $external_location_id){ @@ -1151,6 +1872,29 @@ public function updateExternalLocation($summit_id, $external_location_id) * @param $location_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/{location_id}', + summary: 'Delete a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Location deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + ] + )] public function deleteLocation($summit_id, $location_id) { return $this->processRequest(function() use($summit_id, $location_id){ @@ -1171,6 +1915,30 @@ public function deleteLocation($summit_id, $location_id) * @param $floor_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}', + summary: 'Delete a venue floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Floor deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + ] + )] public function deleteVenueFloor($summit_id, $venue_id, $floor_id) { return $this->processRequest(function() use($summit_id, $venue_id, $floor_id){ @@ -1191,6 +1959,30 @@ public function deleteVenueFloor($summit_id, $venue_id, $floor_id) * @param $room_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}', + summary: 'Delete a venue room', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Room deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + ] + )] public function deleteVenueRoom($summit_id, $venue_id, $room_id) { return $this->processRequest(function() use($summit_id, $venue_id, $room_id){ @@ -1214,6 +2006,29 @@ public function deleteVenueRoom($summit_id, $venue_id, $room_id) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/{location_id}/banners', + summary: 'Get all banners for a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: class_name, title, content, type, enabled, start_date, end_date', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, title, start_date, end_date', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBannerPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + ] + )] public function getLocationBanners($summit_id, $location_id) { $summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id); @@ -1272,6 +2087,34 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($location) * @param $location_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/{location_id}/banners', + summary: 'Add a banner to a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData, SummitScopes::WriteLocationBannersData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Banner payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddLocationBannerPayload')), + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Banner created', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBanner')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addLocationBanner($summit_id, $location_id) { return $this->processRequest(function() use($summit_id, $location_id){ @@ -1306,6 +2149,30 @@ public function addLocationBanner($summit_id, $location_id) * @param $banner_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/{location_id}/banners/{banner_id}', + summary: 'Delete a location banner', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData, SummitScopes::WriteLocationBannersData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'banner_id', in: 'path', required: true, description: 'Banner ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Banner deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or banner not found'), + ] + )] public function deleteLocationBanner($summit_id, $location_id, $banner_id) { @@ -1327,6 +2194,35 @@ public function deleteLocationBanner($summit_id, $location_id, $banner_id) * @param $banner_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/{location_id}/banners/{banner_id}', + summary: 'Update a location banner', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData, SummitScopes::WriteLocationBannersData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'banner_id', in: 'path', required: true, description: 'Banner ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Banner payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateLocationBannerPayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Banner updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBanner')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or banner not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateLocationBanner($summit_id, $location_id, $banner_id) { return $this->processRequest(function() use($summit_id, $location_id, $banner_id){ @@ -1368,6 +2264,26 @@ public function updateLocationBanner($summit_id, $location_id, $banner_id) * @param $map_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/{location_id}/maps/{map_id}', + summary: 'Get a location map', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'map_id', in: 'path', required: true, description: 'Map ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationMap')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map not found'), + ] + )] public function getLocationMap($summit_id, $location_id, $map_id) { return $this->processRequest(function() use($summit_id, $location_id, $map_id){ @@ -1404,6 +2320,33 @@ public function getLocationMap($summit_id, $location_id, $map_id) * @param $location_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/{location_id}/maps', + summary: 'Add a map to a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Map created', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationMap')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addLocationMap(LaravelRequest $request, $summit_id, $location_id) { @@ -1457,6 +2400,34 @@ public function addLocationMap(LaravelRequest $request, $summit_id, $location_id * @param $map_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/{location_id}/maps/{map_id}', + summary: 'Update a location map', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'map_id', in: 'path', required: true, description: 'Map ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Map updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationMap')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateLocationMap(LaravelRequest $request, $summit_id, $location_id, $map_id) { return $this->processRequest(function() use($request, $summit_id, $location_id, $map_id){ @@ -1504,6 +2475,30 @@ public function updateLocationMap(LaravelRequest $request, $summit_id, $location * @param $map_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/{location_id}/maps/{map_id}', + summary: 'Delete a location map', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'map_id', in: 'path', required: true, description: 'Map ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Map deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map not found'), + ] + )] public function deleteLocationMap($summit_id, $location_id, $map_id) { return $this->processRequest(function() use($summit_id, $location_id, $map_id){ @@ -1524,6 +2519,26 @@ public function deleteLocationMap($summit_id, $location_id, $map_id) * @param $image_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/{location_id}/images/{image_id}', + summary: 'Get a location image', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::ReadSummitData, SummitScopes::ReadAllSummitData]], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'image_id', in: 'path', required: true, description: 'Image ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationImage')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image not found'), + ] + )] public function getLocationImage($summit_id, $location_id, $image_id) { return $this->processRequest(function() use($summit_id, $location_id, $image_id){ @@ -1560,6 +2575,33 @@ public function getLocationImage($summit_id, $location_id, $image_id) * @param $location_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/{location_id}/images', + summary: 'Add an image to a location', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Image created', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationImage')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addLocationImage(LaravelRequest $request, $summit_id, $location_id) { return $this->processRequest(function() use($request, $summit_id, $location_id){ @@ -1612,6 +2654,35 @@ public function addLocationImage(LaravelRequest $request, $summit_id, $location_ * @param $image_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/{location_id}/images/{image_id}', + summary: 'Update a location image', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'image_id', in: 'path', required: true, description: 'Image ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody(description: 'Image payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateLocationImagePayload')), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Image updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationImage')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateLocationImage(LaravelRequest $request, $summit_id, $location_id, $image_id) { return $this->processRequest(function() use($request, $summit_id, $location_id, $image_id){ @@ -1647,6 +2718,30 @@ public function updateLocationImage(LaravelRequest $request, $summit_id, $locati * @param $image_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/{location_id}/images/{image_id}', + summary: 'Delete a location image', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'image_id', in: 'path', required: true, description: 'Image ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Image deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image not found'), + ] + )] public function deleteLocationImage($summit_id, $location_id, $image_id) { return $this->processRequest(function() use($summit_id, $location_id, $image_id){ @@ -1664,6 +2759,34 @@ public function deleteLocationImage($summit_id, $location_id, $image_id) * @param $room_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}/image', + summary: 'Add an image to a venue room', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room image added', content: new OA\JsonContent(ref: '#/components/schemas/SummitImage')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueRoomImage(LaravelRequest $request, $summit_id, $venue_id, $room_id) { return $this->processRequest(function() use($request, $summit_id, $venue_id, $room_id){ @@ -1711,6 +2834,33 @@ public function addVenueRoomImage(LaravelRequest $request, $summit_id, $venue_id * @param $room_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}/image', + summary: 'Remove image from a venue room', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Room image removed', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + ] + )] public function removeVenueRoomImage($summit_id, $venue_id, $room_id) { return $this->processRequest(function() use($summit_id, $venue_id, $room_id){ @@ -1754,6 +2904,34 @@ public function removeVenueRoomImage($summit_id, $venue_id, $room_id) * @param $floor_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/image', + summary: 'Add an image to a venue floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Floor image added', content: new OA\JsonContent(ref: '#/components/schemas/SummitImage')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueFloorImage(LaravelRequest $request, $summit_id, $venue_id, $floor_id) { return $this->processRequest(function() use($request, $summit_id, $venue_id, $floor_id) { @@ -1802,6 +2980,33 @@ public function addVenueFloorImage(LaravelRequest $request, $summit_id, $venue_i * @param $floor_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/image', + summary: 'Remove image from a venue floor', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Floor image removed', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + ] + )] public function removeVenueFloorImage($summit_id, $venue_id, $floor_id) { return $this->processRequest(function () use($summit_id, $venue_id, $floor_id) { @@ -1848,6 +3053,29 @@ public function removeVenueFloorImage($summit_id, $venue_id, $floor_id) * @param $target_summit_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/copy/{target_summit_id}', + summary: 'Copy locations from one summit to another', + tags: ['Summit Locations'], + security: [ + ['locations_oauth2' => [SummitScopes::WriteSummitData, SummitScopes::WriteLocationsData, SummitScopes::WriteLocationBannersData]], + ], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ], + ], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Source summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'target_summit_id', in: 'path', required: true, description: 'Target summit ID or slug', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Locations copied successfully'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Source or target summit not found'), + ] + )] public function copy(LaravelRequest $request, $source_summit_id, $target_summit_id) { return $this->processRequest(function() use($request, $source_summit_id, $target_summit_id) { diff --git a/app/Http/Controllers/Apis/Protected/Summit/Traits/SummitBookableVenueRoomApi.php b/app/Http/Controllers/Apis/Protected/Summit/Traits/SummitBookableVenueRoomApi.php index 4a3fa34d4..675f77fa2 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/Traits/SummitBookableVenueRoomApi.php +++ b/app/Http/Controllers/Apis/Protected/Summit/Traits/SummitBookableVenueRoomApi.php @@ -25,6 +25,8 @@ use models\summit\SummitRoomReservation; use models\summit\SummitVenue; use ModelSerializers\SerializerRegistry; +use OpenApi\Attributes as OA; +use Symfony\Component\HttpFoundation\Response; use utils\Filter; use utils\FilterParser; use utils\PagingInfo; @@ -47,6 +49,22 @@ trait SummitBookableVenueRoomApi * @param $id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/bookable-rooms/all/reservations/{reservation_id}', + summary: 'Get a reservation by ID', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'reservation_id', in: 'path', required: true, description: 'Reservation ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Reservation not found'), + ] + )] public function getReservationById($id) { return $this->processRequest(function () use ($id) { @@ -69,6 +87,25 @@ public function getReservationById($id) * @param $summit_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/bookable-rooms', + summary: 'Get all bookable venue rooms for a summit', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: name, description, capacity, availability_day, attribute', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, name, capacity', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoomPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getBookableVenueRooms($summit_id) { @@ -130,6 +167,25 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/bookable-rooms/all/reservations', + summary: 'Get all reservations for a summit', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: summit_id, room_name, room_id, owner_id, owner_name, owner_email, not_owner_email, status, start_datetime, end_datetime', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, start_datetime, end_datetime, room_name, room_id, status, created, owner_name, owner_email', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservationPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getAllReservationsBySummit($summit_id) { @@ -202,6 +258,20 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/bookable-rooms/all/reservations/csv', + summary: 'Export reservations for a summit as CSV', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: summit_id, room_name, room_id, owner_id, owner_name, owner_email, not_owner_email, status, start_datetime, end_datetime', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, start_datetime, end_datetime, room_name, room_id, status, created, owner_name, owner_email', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'CSV file', content: new OA\MediaType(mediaType: 'text/csv')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getAllReservationsBySummitCSV($summit_id) { @@ -288,6 +358,23 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { * @param $room_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}', + summary: 'Get a bookable venue room by venue and room ID', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + ] + )] public function getBookableVenueRoomByVenue($summit_id, $venue_id, $room_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $room_id) { @@ -321,6 +408,22 @@ public function getBookableVenueRoomByVenue($summit_id, $venue_id, $room_id) * @param $room_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}', + summary: 'Get a bookable venue room by ID', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or room not found'), + ] + )] public function getBookableVenueRoom($summit_id, $room_id) { return $this->processRequest(function () use ($summit_id, $room_id) { @@ -348,6 +451,23 @@ public function getBookableVenueRoom($summit_id, $room_id) * @param $day * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}/availability/{day}', + summary: 'Get availability slots for a bookable room on a specific day', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'day', in: 'path', required: true, description: 'Day (epoch timestamp or Y-m-d format)', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(type: 'object')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or room not found'), + ] + )] public function getBookableVenueRoomAvailability($summit_id, $room_id, $day) { return $this->processRequest(function () use ($summit_id, $room_id, $day) { @@ -424,6 +544,23 @@ public function getBookableVenueRoomAvailability($summit_id, $room_id, $day) * @param $room_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}/reservations', + summary: 'Create a reservation for a bookable room', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Reservation created', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function createBookableVenueRoomReservation($summit_id, $room_id) { return $this->processRequest(function () use ($summit_id, $room_id) { @@ -458,6 +595,23 @@ public function createBookableVenueRoomReservation($summit_id, $room_id) * @param $room_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}/reservations/offline', + summary: 'Create an offline reservation for a bookable room', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Offline reservation created', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function createOfflineBookableVenueRoomReservation($summit_id, $room_id) { return $this->processRequest(function () use ($summit_id, $room_id) { @@ -489,6 +643,24 @@ public function createOfflineBookableVenueRoomReservation($summit_id, $room_id) * @param $room_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}/reservations/{reservation_id}', + summary: 'Update a bookable room reservation', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'reservation_id', in: 'path', required: true, description: 'Reservation ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Reservation updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, room or reservation not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateBookableVenueRoomReservation($summit_id, $room_id, $reservation_id) { return $this->processRequest(function () use ($summit_id, $room_id, $reservation_id) { @@ -519,6 +691,22 @@ public function updateBookableVenueRoomReservation($summit_id, $room_id, $reserv * @param $summit_id * @return mixed */ + #[OA\Get( + path: '/api/v1/summits/{id}/locations/bookable-rooms/all/reservations/me', + summary: 'Get my bookable room reservations for a summit', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservationPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: 'Not authenticated'), + ] + )] public function getMyBookableVenueRoomReservations($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -557,6 +745,20 @@ public function getMyBookableVenueRoomReservations($summit_id) * @param $reservation_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/bookable-rooms/all/reservations/me/{reservation_id}', + summary: 'Cancel my bookable room reservation', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'reservation_id', in: 'path', required: true, description: 'Reservation ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Reservation cancelled', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or reservation not found'), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: 'Not authenticated'), + ] + )] public function cancelMyBookableVenueRoomReservation($summit_id, $reservation_id) { return $this->processRequest(function () use ($summit_id, $reservation_id) { @@ -582,6 +784,24 @@ public function cancelMyBookableVenueRoomReservation($summit_id, $reservation_id * @param $room_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}', + summary: 'Update a bookable venue room', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Room updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateVenueBookableRoom($summit_id, $venue_id, $room_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $room_id) { @@ -617,6 +837,24 @@ public function updateVenueBookableRoom($summit_id, $venue_id, $room_id) }); } + #[OA\Get( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/bookable-rooms/{room_id}', + summary: 'Get a bookable venue room by floor', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor or room not found'), + ] + )] public function getVenueFloorBookableRoom($summit_id, $venue_id, $floor_id, $room_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $floor_id, $room_id) { @@ -661,6 +899,25 @@ public function getVenueFloorBookableRoom($summit_id, $venue_id, $floor_id, $roo * @param $room_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/bookable-rooms/{room_id}', + summary: 'Update a bookable venue room by floor', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Room updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor or room not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function updateVenueFloorBookableRoom($summit_id, $venue_id, $floor_id, $room_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $floor_id, $room_id) { @@ -698,6 +955,20 @@ public function updateVenueFloorBookableRoom($summit_id, $venue_id, $floor_id, $ }); } + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}', + summary: 'Delete a bookable venue room', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Room deleted'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue or room not found'), + ] + )] public function deleteVenueBookableRoom($summit_id, $venue_id, $room_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $room_id) { @@ -716,6 +987,23 @@ public function deleteVenueBookableRoom($summit_id, $venue_id, $room_id) * @param $venue_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms', + summary: 'Add a bookable room to a venue', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room created', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueBookableRoom($summit_id, $venue_id) { return $this->processRequest(function () use ($summit_id, $venue_id) { @@ -754,6 +1042,24 @@ public function addVenueBookableRoom($summit_id, $venue_id) * @param $venue_id * @return mixed */ + #[OA\Post( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/bookable-rooms', + summary: 'Add a bookable room to a venue floor', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'floor_id', in: 'path', required: true, description: 'Floor ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Room created', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue or floor not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function addVenueFloorBookableRoom($summit_id, $venue_id, $floor_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $floor_id) { @@ -796,6 +1102,24 @@ public function addVenueFloorBookableRoom($summit_id, $venue_id, $floor_id) * @param $attribute_id * @return mixed */ + #[OA\Put( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}/attributes/{attribute_id}', + summary: 'Add an attribute to a bookable venue room', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'attribute_id', in: 'path', required: true, description: 'Attribute ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_CREATED, description: 'Attribute added', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, room or attribute not found'), + ] + )] public function addVenueBookableRoomAttribute($summit_id, $venue_id, $room_id, $attribute_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $room_id, $attribute_id) { @@ -826,6 +1150,21 @@ public function addVenueBookableRoomAttribute($summit_id, $venue_id, $room_id, $ * @param $attribute_id * @return mixed */ + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}/attributes/{attribute_id}', + summary: 'Remove an attribute from a bookable venue room', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'venue_id', in: 'path', required: true, description: 'Venue ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'attribute_id', in: 'path', required: true, description: 'Attribute ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Attribute removed', content: new OA\JsonContent(ref: '#/components/schemas/SummitBookableVenueRoom')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, room or attribute not found'), + ] + )] public function deleteVenueBookableRoomAttribute($summit_id, $venue_id, $room_id, $attribute_id) { return $this->processRequest(function () use ($summit_id, $venue_id, $room_id, $attribute_id) { @@ -846,6 +1185,21 @@ public function deleteVenueBookableRoomAttribute($summit_id, $venue_id, $room_id }); } + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}/reservations/{reservation_id}/refund', + summary: 'Refund a bookable room reservation', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'reservation_id', in: 'path', required: true, description: 'Reservation ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Reservation refunded', content: new OA\JsonContent(ref: '#/components/schemas/SummitRoomReservation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, room or reservation not found'), + new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), + ] + )] public function refundBookableVenueRoomReservation($summit_id, $room_id, $reservation_id) { return $this->processRequest(function () use ($summit_id, $room_id, $reservation_id) { @@ -873,6 +1227,20 @@ public function refundBookableVenueRoomReservation($summit_id, $room_id, $reserv }); } + #[OA\Delete( + path: '/api/v1/summits/{id}/locations/bookable-rooms/{room_id}/reservations/{reservation_id}', + summary: 'Cancel a bookable room reservation', + tags: ['Summit Locations'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'room_id', in: 'path', required: true, description: 'Room ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'reservation_id', in: 'path', required: true, description: 'Reservation ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Reservation cancelled'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, room or reservation not found'), + ] + )] public function cancelBookableVenueRoomReservation($summit_id, $room_id, $reservation_id) { return $this->processRequest(function () use ($summit_id, $room_id, $reservation_id) { @@ -890,4 +1258,4 @@ public function cancelBookableVenueRoomReservation($summit_id, $room_id, $reserv return $this->deleted(); }); } -} \ No newline at end of file +} diff --git a/app/Swagger/Models/SummitAbstractLocationSchema.php b/app/Swagger/Models/SummitAbstractLocationSchema.php new file mode 100644 index 000000000..99f86e62b --- /dev/null +++ b/app/Swagger/Models/SummitAbstractLocationSchema.php @@ -0,0 +1,35 @@ + 'Read All Summit Data', + SummitScopes::ReadSummitData => 'Read Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + SummitScopes::WriteLocationsData => 'Write Locations Data', + SummitScopes::WriteLocationBannersData => 'Write Location Banners Data', + ], + ), + ], +) +] +class LocationsAuthSchema +{ +} From b47665c46ee4fc9e4cc81c3802cf770171a44acb Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 16 Jan 2026 22:03:14 +0000 Subject: [PATCH 2/2] chore: Rename Not Found and add operationIds Signed-off-by: Matias Perrone --- .../OAuth2SummitLocationsApiController.php | 207 +++++++++++++----- 1 file changed, 158 insertions(+), 49 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php index 0d53ba84e..80d6c0ee2 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitLocationsApiController.php @@ -151,6 +151,7 @@ public function __construct */ #[OA\Get( path: '/api/v1/summits/{id}/locations', + operationId: 'getSummitLocations', summary: 'Get all locations for a summit', tags: ['Summit Locations'], security: [ @@ -168,7 +169,7 @@ public function __construct ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocationPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getLocations($summit_id) @@ -241,6 +242,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { */ #[OA\Get( path: '/api/v1/summits/{id}/locations/venues', + operationId: 'getSummitVenues', summary: 'Get all venues for a summit', tags: ['Summit Locations'], security: [ @@ -258,7 +260,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenuePaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getVenues($summit_id) @@ -332,6 +334,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { #[OA\Get( path: '/api/v1/summits/{id}/locations/venues/rooms/all', + operationId: 'getAllSummitVenueRooms', summary: 'Get all venue rooms for a summit', tags: ['Summit Locations'], security: [ @@ -349,7 +352,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoomPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getAllVenuesRooms($summit_id){ @@ -408,6 +411,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { */ #[OA\Get( path: '/api/v1/summits/{id}/locations/external-locations', + operationId: 'getSummitExternalLocations', summary: 'Get all external locations for a summit', tags: ['Summit Locations'], security: [ @@ -421,7 +425,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitExternalLocationPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getExternalLocations($summit_id) @@ -461,6 +465,7 @@ public function getExternalLocations($summit_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/hotels', + operationId: 'getSummitHotels', summary: 'Get all hotels for a summit', tags: ['Summit Locations'], security: [ @@ -474,7 +479,7 @@ public function getExternalLocations($summit_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitHotelPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getHotels($summit_id) @@ -513,6 +518,7 @@ public function getHotels($summit_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/airports', + operationId: 'getSummitAirports', summary: 'Get all airports for a summit', tags: ['Summit Locations'], security: [ @@ -526,7 +532,7 @@ public function getHotels($summit_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAirportPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getAirports($summit_id) @@ -565,8 +571,27 @@ public function getAirports($summit_id) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/public/v1/summits/{id}/locations/{location_id}', + operationId: 'getLocationByIdPublic', + summary: 'Get a specific location by ID (Public)', + tags: ['Summit Locations (Public)'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), + ] + )] + #[OA\Get( path: '/api/v1/summits/{id}/locations/{location_id}', + operationId: 'getLocationById', summary: 'Get a specific location by ID', tags: ['Summit Locations'], security: [ @@ -581,7 +606,7 @@ public function getAirports($summit_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getLocation($summit_id, $location_id) @@ -704,6 +729,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($location) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/{location_id}/events', + operationId: 'getLocationEvents', summary: 'Get events for a location', tags: ['Summit Locations'], security: [ @@ -722,7 +748,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($location) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitEventPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), ] )] public function getLocationEvents($summit_id, $location_id) @@ -735,8 +761,30 @@ public function getLocationEvents($summit_id, $location_id) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/public/v1/summits/{id}/locations/{location_id}/events/published', + operationId: 'getLocationPublishedEventsPublic', + summary: 'Get published events for a location (Public)', + tags: ['Summit Locations (Public)'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID or "tbd"', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: title, start_date, end_date, speaker, tags, event_type_id, track_id, type_show_always_on_schedule', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: title, start_date, end_date, id, created, track_id', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitEventPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), + ] + )] #[OA\Get( path: '/api/v1/summits/{id}/locations/{location_id}/events/published', + operationId: 'getLocationPublishedEvents', summary: 'Get published events for a location', tags: ['Summit Locations'], security: [ @@ -755,7 +803,7 @@ public function getLocationEvents($summit_id, $location_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitEventPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), ] )] public function getLocationPublishedEvents($summit_id, $location_id) @@ -769,6 +817,7 @@ public function getLocationPublishedEvents($summit_id, $location_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/metadata', + operationId: 'getSummitLocationsMetadata', summary: 'Get location metadata for a summit', tags: ['Summit Locations'], security: [ @@ -786,7 +835,7 @@ public function getLocationPublishedEvents($summit_id, $location_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(type: 'object')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), ] )] public function getMetadata($summit_id) @@ -808,6 +857,7 @@ public function getMetadata($summit_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}', + operationId: 'getVenueFloorById', summary: 'Get a venue floor by ID', tags: ['Summit Locations'], security: [ @@ -823,7 +873,7 @@ public function getMetadata($summit_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor Not Found'), ] )] public function getVenueFloor($summit_id, $venue_id, $floor_id) @@ -866,6 +916,7 @@ public function getVenueFloor($summit_id, $venue_id, $floor_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}', + operationId: 'getVenueRoomById', summary: 'Get a venue room by ID', tags: ['Summit Locations'], security: [ @@ -881,7 +932,7 @@ public function getVenueFloor($summit_id, $venue_id, $floor_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room Not Found'), ] )] public function getVenueRoom($summit_id, $venue_id, $room_id) @@ -924,6 +975,7 @@ public function getVenueRoom($summit_id, $venue_id, $room_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/rooms/{room_id}', + operationId: 'getVenueFloorRoomById', summary: 'Get a room on a specific floor', tags: ['Summit Locations'], security: [ @@ -940,7 +992,7 @@ public function getVenueRoom($summit_id, $venue_id, $room_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor, or room Not Found'), ] )] public function getVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) @@ -992,6 +1044,7 @@ public function getVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations', + operationId: 'addSummitLocation', summary: 'Add a new location to a summit', tags: ['Summit Locations'], security: [ @@ -1013,7 +1066,7 @@ public function getVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) requestBody: new OA\RequestBody(description: 'Location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddLocationPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Location created', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1043,6 +1096,7 @@ public function addLocation($summit_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/venues', + operationId: 'addSummitVenue', summary: 'Add a new venue to a summit', tags: ['Summit Locations'], security: [ @@ -1064,7 +1118,7 @@ public function addLocation($summit_id) requestBody: new OA\RequestBody(description: 'Venue payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenuePayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Venue created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenue')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1095,6 +1149,7 @@ public function addVenue($summit_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/external-locations', + operationId: 'addSummitExternalLocation', summary: 'Add a new external location to a summit', tags: ['Summit Locations'], security: [ @@ -1116,7 +1171,7 @@ public function addVenue($summit_id) requestBody: new OA\RequestBody(description: 'External location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddExternalLocationPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'External location created', content: new OA\JsonContent(ref: '#/components/schemas/SummitExternalLocation')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1148,6 +1203,7 @@ public function addExternalLocation($summit_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/hotels', + operationId: 'addSummitHotel', summary: 'Add a new hotel to a summit', tags: ['Summit Locations'], security: [ @@ -1169,7 +1225,7 @@ public function addExternalLocation($summit_id) requestBody: new OA\RequestBody(description: 'Hotel payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddHotelPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Hotel created', content: new OA\JsonContent(ref: '#/components/schemas/SummitHotel')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1200,6 +1256,7 @@ public function addHotel($summit_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/airports', + operationId: 'addSummitAirport', summary: 'Add a new airport to a summit', tags: ['Summit Locations'], security: [ @@ -1221,7 +1278,7 @@ public function addHotel($summit_id) requestBody: new OA\RequestBody(description: 'Airport payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddAirportPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Airport created', content: new OA\JsonContent(ref: '#/components/schemas/SummitAirport')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1254,6 +1311,7 @@ public function addAirport($summit_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors', + operationId: 'addVenueFloor', summary: 'Add a new floor to a venue', tags: ['Summit Locations'], security: [ @@ -1276,7 +1334,7 @@ public function addAirport($summit_id) requestBody: new OA\RequestBody(description: 'Floor payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenueFloorPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Floor created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1309,6 +1367,7 @@ public function addVenueFloor($summit_id, $venue_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms', + operationId: 'addVenueRoom', summary: 'Add a new room to a venue', tags: ['Summit Locations'], security: [ @@ -1331,7 +1390,7 @@ public function addVenueFloor($summit_id, $venue_id) requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenueRoomPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Room created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1362,6 +1421,7 @@ public function addVenueRoom($summit_id, $venue_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/rooms', + operationId: 'addVenueFloorRoom', summary: 'Add a new room to a venue floor', tags: ['Summit Locations'], security: [ @@ -1385,7 +1445,7 @@ public function addVenueRoom($summit_id, $venue_id) requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddVenueFloorRoomPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Room created', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1423,6 +1483,7 @@ public function addVenueFloorRoom($summit_id, $venue_id, $floor_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/{location_id}', + operationId: 'updateSummitLocation', summary: 'Update a location', tags: ['Summit Locations'], security: [ @@ -1445,7 +1506,7 @@ public function addVenueFloorRoom($summit_id, $venue_id, $floor_id) requestBody: new OA\RequestBody(description: 'Location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateLocationPayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Location updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitAbstractLocation')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1477,6 +1538,7 @@ public function updateLocation($summit_id, $location_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/venues/{venue_id}', + operationId: 'updateSummitVenue', summary: 'Update a venue', tags: ['Summit Locations'], security: [ @@ -1499,7 +1561,7 @@ public function updateLocation($summit_id, $location_id) requestBody: new OA\RequestBody(description: 'Venue payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenuePayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Venue updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenue')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or venue Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1533,6 +1595,7 @@ public function updateVenue($summit_id, $venue_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}', + operationId: 'updateVenueFloor', summary: 'Update a venue floor', tags: ['Summit Locations'], security: [ @@ -1556,7 +1619,7 @@ public function updateVenue($summit_id, $venue_id) requestBody: new OA\RequestBody(description: 'Floor payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenueFloorPayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Floor updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1592,6 +1655,7 @@ public function updateVenueFloor($summit_id, $venue_id, $floor_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}', + operationId: 'updateVenueRoom', summary: 'Update a venue room', tags: ['Summit Locations'], security: [ @@ -1615,7 +1679,7 @@ public function updateVenueFloor($summit_id, $venue_id, $floor_id) requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenueRoomPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Room updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1649,6 +1713,7 @@ public function updateVenueRoom($summit_id, $venue_id, $room_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/rooms/{room_id}', + operationId: 'updateVenueFloorRoom', summary: 'Update a room on a specific floor', tags: ['Summit Locations'], security: [ @@ -1673,7 +1738,7 @@ public function updateVenueRoom($summit_id, $venue_id, $room_id) requestBody: new OA\RequestBody(description: 'Room payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateVenueFloorRoomPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Room updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, floor, or room Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1708,6 +1773,7 @@ public function updateVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/hotels/{hotel_id}', + operationId: 'updateSummitHotel', summary: 'Update a hotel', tags: ['Summit Locations'], security: [ @@ -1730,7 +1796,7 @@ public function updateVenueFloorRoom($summit_id, $venue_id, $floor_id, $room_id) requestBody: new OA\RequestBody(description: 'Hotel payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateHotelPayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Hotel updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitHotel')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or hotel not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or hotel Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1762,6 +1828,7 @@ public function updateHotel($summit_id, $hotel_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/airports/{airport_id}', + operationId: 'updateSummitAirport', summary: 'Update an airport', tags: ['Summit Locations'], security: [ @@ -1784,7 +1851,7 @@ public function updateHotel($summit_id, $hotel_id) requestBody: new OA\RequestBody(description: 'Airport payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateAirportPayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Airport updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitAirport')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or airport not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or airport Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1816,6 +1883,7 @@ public function updateAirport($summit_id, $airport_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/external-locations/{external_location_id}', + operationId: 'updateSummitExternalLocation', summary: 'Update an external location', tags: ['Summit Locations'], security: [ @@ -1838,7 +1906,7 @@ public function updateAirport($summit_id, $airport_id) requestBody: new OA\RequestBody(description: 'External location payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateExternalLocationPayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'External location updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitExternalLocation')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or external location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or external location Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -1874,6 +1942,7 @@ public function updateExternalLocation($summit_id, $external_location_id) */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/{location_id}', + operationId: 'deleteSummitLocation', summary: 'Delete a location', tags: ['Summit Locations'], security: [ @@ -1892,7 +1961,7 @@ public function updateExternalLocation($summit_id, $external_location_id) ], responses: [ new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Location deleted'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), ] )] public function deleteLocation($summit_id, $location_id) @@ -1917,6 +1986,7 @@ public function deleteLocation($summit_id, $location_id) */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}', + operationId: 'deleteVenueFloor', summary: 'Delete a venue floor', tags: ['Summit Locations'], security: [ @@ -1936,7 +2006,7 @@ public function deleteLocation($summit_id, $location_id) ], responses: [ new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Floor deleted'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor Not Found'), ] )] public function deleteVenueFloor($summit_id, $venue_id, $floor_id) @@ -1961,6 +2031,7 @@ public function deleteVenueFloor($summit_id, $venue_id, $floor_id) */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}', + operationId: 'deleteVenueRoom', summary: 'Delete a venue room', tags: ['Summit Locations'], security: [ @@ -1980,7 +2051,7 @@ public function deleteVenueFloor($summit_id, $venue_id, $floor_id) ], responses: [ new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Room deleted'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room Not Found'), ] )] public function deleteVenueRoom($summit_id, $venue_id, $room_id) @@ -2006,8 +2077,30 @@ public function deleteVenueRoom($summit_id, $venue_id, $room_id) * @param $location_id * @return mixed */ + #[OA\Get( + path: '/api/public/v1/summits/{id}/locations/{location_id}/banners', + operationId: 'getLocationBannersPublic', + summary: 'Get all banners for a location', + tags: ['Summit Locations (Public)'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'location_id', in: 'path', required: true, description: 'Location ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by: class_name, title, content, type, enabled, start_date, end_date', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by: id, title, start_date, end_date', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), + new OA\Parameter(name: 'per_page', in: 'query', required: false, description: 'Items per page', schema: new OA\Schema(type: 'integer', default: 10)), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand related entities', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'fields', in: 'query', required: false, description: 'Fields to return', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'relations', in: 'query', required: false, description: 'Relations to include', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBannerPaginatedResponse')), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), + ] + )] #[OA\Get( path: '/api/v1/summits/{id}/locations/{location_id}/banners', + operationId: 'getLocationBanners', summary: 'Get all banners for a location', tags: ['Summit Locations'], security: [ @@ -2026,7 +2119,7 @@ public function deleteVenueRoom($summit_id, $venue_id, $room_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBannerPaginatedResponse')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), ] )] public function getLocationBanners($summit_id, $location_id) @@ -2089,6 +2182,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($location) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/{location_id}/banners', + operationId: 'addLocationBanner', summary: 'Add a banner to a location', tags: ['Summit Locations'], security: [ @@ -2111,7 +2205,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($location) requestBody: new OA\RequestBody(description: 'Banner payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/AddLocationBannerPayload')), responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Banner created', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBanner')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2151,6 +2245,7 @@ public function addLocationBanner($summit_id, $location_id) */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/{location_id}/banners/{banner_id}', + operationId: 'deleteLocationBanner', summary: 'Delete a location banner', tags: ['Summit Locations'], security: [ @@ -2170,7 +2265,7 @@ public function addLocationBanner($summit_id, $location_id) ], responses: [ new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Banner deleted'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or banner not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or banner Not Found'), ] )] public function deleteLocationBanner($summit_id, $location_id, $banner_id) @@ -2196,6 +2291,7 @@ public function deleteLocationBanner($summit_id, $location_id, $banner_id) */ #[OA\Put( path: '/api/v1/summits/{id}/locations/{location_id}/banners/{banner_id}', + operationId: 'updateLocationBanner', summary: 'Update a location banner', tags: ['Summit Locations'], security: [ @@ -2219,7 +2315,7 @@ public function deleteLocationBanner($summit_id, $location_id, $banner_id) requestBody: new OA\RequestBody(description: 'Banner payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateLocationBannerPayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Banner updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationBanner')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or banner not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or banner Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2266,6 +2362,7 @@ public function updateLocationBanner($summit_id, $location_id, $banner_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/{location_id}/maps/{map_id}', + operationId: 'getLocationMap', summary: 'Get a location map', tags: ['Summit Locations'], security: [ @@ -2281,7 +2378,7 @@ public function updateLocationBanner($summit_id, $location_id, $banner_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationMap')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map Not Found'), ] )] public function getLocationMap($summit_id, $location_id, $map_id) @@ -2322,6 +2419,7 @@ public function getLocationMap($summit_id, $location_id, $map_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/{location_id}/maps', + operationId: 'addLocationMap', summary: 'Add a map to a location', tags: ['Summit Locations'], security: [ @@ -2343,7 +2441,7 @@ public function getLocationMap($summit_id, $location_id, $map_id) ], responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Map created', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationMap')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2402,6 +2500,7 @@ public function addLocationMap(LaravelRequest $request, $summit_id, $location_id */ #[OA\Put( path: '/api/v1/summits/{id}/locations/{location_id}/maps/{map_id}', + operationId: 'updateLocationMap', summary: 'Update a location map', tags: ['Summit Locations'], security: [ @@ -2424,7 +2523,7 @@ public function addLocationMap(LaravelRequest $request, $summit_id, $location_id ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Map updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationMap')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2477,6 +2576,7 @@ public function updateLocationMap(LaravelRequest $request, $summit_id, $location */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/{location_id}/maps/{map_id}', + operationId: 'deleteLocationMap', summary: 'Delete a location map', tags: ['Summit Locations'], security: [ @@ -2496,7 +2596,7 @@ public function updateLocationMap(LaravelRequest $request, $summit_id, $location ], responses: [ new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Map deleted'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or map Not Found'), ] )] public function deleteLocationMap($summit_id, $location_id, $map_id) @@ -2521,6 +2621,7 @@ public function deleteLocationMap($summit_id, $location_id, $map_id) */ #[OA\Get( path: '/api/v1/summits/{id}/locations/{location_id}/images/{image_id}', + operationId: 'getLocationImage', summary: 'Get a location image', tags: ['Summit Locations'], security: [ @@ -2536,7 +2637,7 @@ public function deleteLocationMap($summit_id, $location_id, $map_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'OK', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationImage')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image Not Found'), ] )] public function getLocationImage($summit_id, $location_id, $image_id) @@ -2577,6 +2678,7 @@ public function getLocationImage($summit_id, $location_id, $image_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/{location_id}/images', + operationId: 'addLocationImage', summary: 'Add an image to a location', tags: ['Summit Locations'], security: [ @@ -2598,7 +2700,7 @@ public function getLocationImage($summit_id, $location_id, $image_id) ], responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Image created', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationImage')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or location not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or Location Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2656,6 +2758,7 @@ public function addLocationImage(LaravelRequest $request, $summit_id, $location_ */ #[OA\Put( path: '/api/v1/summits/{id}/locations/{location_id}/images/{image_id}', + operationId: 'updateLocationImage', summary: 'Update a location image', tags: ['Summit Locations'], security: [ @@ -2679,7 +2782,7 @@ public function addLocationImage(LaravelRequest $request, $summit_id, $location_ requestBody: new OA\RequestBody(description: 'Image payload', required: true, content: new OA\JsonContent(ref: '#/components/schemas/UpdateLocationImagePayload')), responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Image updated', content: new OA\JsonContent(ref: '#/components/schemas/SummitLocationImage')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2720,6 +2823,7 @@ public function updateLocationImage(LaravelRequest $request, $summit_id, $locati */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/{location_id}/images/{image_id}', + operationId: 'deleteLocationImage', summary: 'Delete a location image', tags: ['Summit Locations'], security: [ @@ -2739,7 +2843,7 @@ public function updateLocationImage(LaravelRequest $request, $summit_id, $locati ], responses: [ new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Image deleted'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, location, or image Not Found'), ] )] public function deleteLocationImage($summit_id, $location_id, $image_id) @@ -2761,6 +2865,7 @@ public function deleteLocationImage($summit_id, $location_id, $image_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}/image', + operationId: 'addVenueRoomImage', summary: 'Add an image to a venue room', tags: ['Summit Locations'], security: [ @@ -2783,7 +2888,7 @@ public function deleteLocationImage($summit_id, $location_id, $image_id) ], responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Room image added', content: new OA\JsonContent(ref: '#/components/schemas/SummitImage')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2836,6 +2941,7 @@ public function addVenueRoomImage(LaravelRequest $request, $summit_id, $venue_id */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/rooms/{room_id}/image', + operationId: 'removeVenueRoomImage', summary: 'Remove image from a venue room', tags: ['Summit Locations'], security: [ @@ -2858,7 +2964,7 @@ public function addVenueRoomImage(LaravelRequest $request, $summit_id, $venue_id ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Room image removed', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueRoom')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or room Not Found'), ] )] public function removeVenueRoomImage($summit_id, $venue_id, $room_id) @@ -2906,6 +3012,7 @@ public function removeVenueRoomImage($summit_id, $venue_id, $room_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/image', + operationId: 'addVenueFloorImage', summary: 'Add an image to a venue floor', tags: ['Summit Locations'], security: [ @@ -2928,7 +3035,7 @@ public function removeVenueRoomImage($summit_id, $venue_id, $room_id) ], responses: [ new OA\Response(response: Response::HTTP_CREATED, description: 'Floor image added', content: new OA\JsonContent(ref: '#/components/schemas/SummitImage')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor Not Found'), new OA\Response(response: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Validation error'), ] )] @@ -2982,6 +3089,7 @@ public function addVenueFloorImage(LaravelRequest $request, $summit_id, $venue_i */ #[OA\Delete( path: '/api/v1/summits/{id}/locations/venues/{venue_id}/floors/{floor_id}/image', + operationId: 'removeVenueFloorImage', summary: 'Remove image from a venue floor', tags: ['Summit Locations'], security: [ @@ -3004,7 +3112,7 @@ public function addVenueFloorImage(LaravelRequest $request, $summit_id, $venue_i ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Floor image removed', content: new OA\JsonContent(ref: '#/components/schemas/SummitVenueFloor')), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, venue, or floor Not Found'), ] )] public function removeVenueFloorImage($summit_id, $venue_id, $floor_id) @@ -3055,6 +3163,7 @@ public function removeVenueFloorImage($summit_id, $venue_id, $floor_id) */ #[OA\Post( path: '/api/v1/summits/{id}/locations/copy/{target_summit_id}', + operationId: 'copySummitLocations', summary: 'Copy locations from one summit to another', tags: ['Summit Locations'], security: [ @@ -3073,7 +3182,7 @@ public function removeVenueFloorImage($summit_id, $venue_id, $floor_id) ], responses: [ new OA\Response(response: Response::HTTP_OK, description: 'Locations copied successfully'), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Source or target summit not found'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Source or target summit Not Found'), ] )] public function copy(LaravelRequest $request, $source_summit_id, $target_summit_id)