From 42425d73f8f5d7bb22099bb56e679549a91bf472 Mon Sep 17 00:00:00 2001 From: Jose Andres Tejerina Date: Thu, 20 Nov 2025 13:49:22 -0300 Subject: [PATCH 1/5] feat: Add complete OpenAPI documentation to OAuth2SummitsEventTypesApiController --- .../OAuth2SummitsEventTypesApiController.php | 437 ++++++++++++++++++ app/Swagger/Models/EventTypeSchemas.php | 152 ++++++ app/Swagger/Models/SummitDocumentSchema.php | 83 ++++ app/Swagger/Models/SummitTicketTypeSchema.php | 138 ++++++ .../Security/EventTypesSecurityScheme.php | 25 + app/Swagger/SummitEventTypeSchemas.php | 217 +++++++++ 6 files changed, 1052 insertions(+) create mode 100644 app/Swagger/Models/EventTypeSchemas.php create mode 100644 app/Swagger/Models/SummitDocumentSchema.php create mode 100644 app/Swagger/Models/SummitTicketTypeSchema.php create mode 100644 app/Swagger/Security/EventTypesSecurityScheme.php create mode 100644 app/Swagger/SummitEventTypeSchemas.php diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php index d700c3a41..55e1cee78 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php @@ -14,9 +14,11 @@ use App\Http\Utils\BooleanCellFormatter; use App\Http\Utils\EpochCellFormatter; +use App\Models\Foundation\Main\IGroup; use App\Models\Foundation\Summit\Events\SummitEventTypeConstants; use App\Models\Foundation\Summit\Repositories\ISummitEventTypeRepository; use App\ModelSerializers\SerializerUtils; +use App\Security\SummitScopes; use App\Services\Model\ISummitEventTypeService; use Exception; use Illuminate\Support\Facades\Log; @@ -33,6 +35,8 @@ use utils\OrderParser; use utils\PagingInfo; use utils\PagingResponse; +use OpenApi\Attributes as OA; +use Symfony\Component\HttpFoundation\Response; /** * Class OAuth2SummitsEventTypesApiController @@ -77,6 +81,71 @@ public function __construct * @param $summit_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/event-types", + operationId: "getAllBySummit", + description: "Get all event types for a summit with pagination and filtering", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ]]], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "page", + in: "query", + required: false, + schema: new OA\Schema(type: "integer", default: 1), + description: "Page number" + ), + new OA\Parameter( + name: "per_page", + in: "query", + required: false, + schema: new OA\Schema(type: "integer", default: 20), + description: "Items per page" + ), + new OA\Parameter( + name: "filter", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Filter by: name, class_name, is_default, black_out_times, use_sponsors, are_sponsors_mandatory, allows_attachment, use_speakers, are_speakers_mandatory, use_moderator, is_moderator_mandatory, should_be_available_on_cfp" + ), + new OA\Parameter( + name: "order", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Order by: id, name" + ), + new OA\Parameter( + name: "expand", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Expand relationships: summit, summit_documents, allowed_ticket_types" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "Event types retrieved successfully", + content: new OA\JsonContent(ref: "#/components/schemas/PaginatedEventTypesResponse") + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function getAllBySummit($summit_id) { @@ -146,6 +215,64 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { * @param $summit_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/event-types/csv", + operationId: "getAllBySummitCSV", + description: "Export event types for a summit as CSV", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ]]], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "page", + in: "query", + required: false, + schema: new OA\Schema(type: "integer", default: 1), + description: "Page number" + ), + new OA\Parameter( + name: "per_page", + in: "query", + required: false, + schema: new OA\Schema(type: "integer"), + description: "Items per page" + ), + new OA\Parameter( + name: "filter", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Filter criteria" + ), + new OA\Parameter( + name: "order", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Order by: id, name" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "CSV file exported successfully", + content: new OA\MediaType(mediaType: "text/csv") + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function getAllBySummitCSV($summit_id) { $values = Request::all(); @@ -272,6 +399,44 @@ public function getAllBySummitCSV($summit_id) * @param $event_type_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/event-types/{event_type_id}", + operationId: "getEventTypeBySummit", + description: "Get a specific event type by ID", + tags: ["Event Types (Public)"], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "event_type_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Event type ID" + ), + new OA\Parameter( + name: "expand", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Expand relationships" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "Event type retrieved successfully", + content: new OA\JsonContent(ref: "#/components/schemas/EventType") + ), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Event type or summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function getEventTypeBySummit($summit_id, $event_type_id) { return $this->processRequest(function () use ($summit_id, $event_type_id) { @@ -297,6 +462,47 @@ public function getEventTypeBySummit($summit_id, $event_type_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: "/api/v1/summits/{id}/event-types", + operationId: "addEventTypeBySummit", + description: "Create a new event type", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteEventTypeData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SummitAdministrators, + IGroup::SuperAdmins, + IGroup::Administrators + ] + ], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: "#/components/schemas/EventTypeAddRequest") + ), + responses: [ + new OA\Response( + response: Response::HTTP_CREATED, + description: "Event type created successfully", + content: new OA\JsonContent(ref: "#/components/schemas/EventType") + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function addEventTypeBySummit($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -321,6 +527,54 @@ public function addEventTypeBySummit($summit_id) * @param $event_type_id * @return mixed */ + #[OA\Put( + path: "/api/v1/summits/{id}/event-types/{event_type_id}", + operationId: "updateEventTypeBySummit", + description: "Update an existing event type", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteEventTypeData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SummitAdministrators, + IGroup::SuperAdmins, + IGroup::Administrators + ] + ], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "event_type_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Event type ID" + ), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: "#/components/schemas/EventTypeUpdateRequest") + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "Event type updated successfully", + content: new OA\JsonContent(ref: "#/components/schemas/EventType") + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Event type or summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function updateEventTypeBySummit($summit_id, $event_type_id) { return $this->processRequest(function () use ($summit_id, $event_type_id) { @@ -345,6 +599,48 @@ public function updateEventTypeBySummit($summit_id, $event_type_id) * @param $event_type_id * @return mixed */ + #[OA\Delete( + path: "/api/v1/summits/{id}/event-types/{event_type_id}", + operationId: "deleteEventTypeBySummit", + description: "Delete an event type", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteEventTypeData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SummitAdministrators, + IGroup::SuperAdmins, + IGroup::Administrators + ] + ], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "event_type_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Event type ID" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_NO_CONTENT, + description: "Event type deleted successfully" + ), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Event type or summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function deleteEventTypeBySummit($summit_id, $event_type_id) { return $this->processRequest(function () use ($summit_id, $event_type_id) { @@ -362,6 +658,42 @@ public function deleteEventTypeBySummit($summit_id, $event_type_id) * @param $summit_id * @return mixed */ + #[OA\Post( + path: "/api/v1/summits/{id}/event-types/seed-defaults", + operationId: "seedDefaultEventTypesBySummit", + description: "Seed default event types for a summit", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteEventTypeData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SummitAdministrators, + IGroup::SuperAdmins, + IGroup::Administrators + ] + ], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_CREATED, + description: "Default event types seeded successfully", + content: new OA\JsonContent(ref: "#/components/schemas/PaginatedEventTypesResponse") + ), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function seedDefaultEventTypesBySummit($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -390,6 +722,55 @@ public function seedDefaultEventTypesBySummit($summit_id) * @param $document_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Post( + path: "/api/v1/summits/{id}/event-types/{event_type_id}/summit-documents/{document_id}", + operationId: "addSummitDocument", + description: "Add a document to an event type", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteEventTypeData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SummitAdministrators, + IGroup::SuperAdmins, + IGroup::Administrators + ] + ], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "event_type_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Event type ID" + ), + new OA\Parameter( + name: "document_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Document ID" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "Document added to event type successfully", + content: new OA\JsonContent(ref: "#/components/schemas/EventType") + ), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Event type, summit or document not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function addSummitDocument($summit_id, $event_type_id, $document_id) { return $this->processRequest(function () use ($summit_id, $event_type_id, $document_id) { @@ -419,6 +800,62 @@ public function addSummitDocument($summit_id, $event_type_id, $document_id) * @param $document_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Delete( + path: "/api/v1/summits/{id}/event-types/{event_type_id}/summit-documents/{document_id}", + operationId: "removeSummitDocument", + description: "Remove a document from an event type", + tags: ["Event Types"], + security: [['summit_event_types_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteEventTypeData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SummitAdministrators, + IGroup::SuperAdmins, + IGroup::Administrators + ] + ], + parameters: [ + new OA\Parameter( + name: "access_token", + in: "query", + required: false, + description: "OAuth2 access token (alternative to Authorization: Bearer)", + schema: new OA\Schema(type: "string", example: "eyJhbGciOi..."), + ), + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID or slug" + ), + new OA\Parameter( + name: "event_type_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Event type ID" + ), + new OA\Parameter( + name: "document_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Document ID" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "Document removed from event type successfully", + content: new OA\JsonContent(ref: "#/components/schemas/EventType") + ), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Event type, summit or document not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function removeSummitDocument($summit_id, $event_type_id, $document_id) { return $this->processRequest(function () use ($summit_id, $event_type_id, $document_id) { diff --git a/app/Swagger/Models/EventTypeSchemas.php b/app/Swagger/Models/EventTypeSchemas.php new file mode 100644 index 000000000..85a0e1962 --- /dev/null +++ b/app/Swagger/Models/EventTypeSchemas.php @@ -0,0 +1,152 @@ + 'Read Summit Data', + SummitScopes::ReadAllSummitData => 'Read All Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + SummitScopes::WriteEventTypeData => 'Write Event Type Data', + ], + ), + ], + ) +] +class EventTypesSecurityScheme{} diff --git a/app/Swagger/SummitEventTypeSchemas.php b/app/Swagger/SummitEventTypeSchemas.php new file mode 100644 index 000000000..26d9441bb --- /dev/null +++ b/app/Swagger/SummitEventTypeSchemas.php @@ -0,0 +1,217 @@ + Date: Fri, 5 Dec 2025 15:51:06 +0000 Subject: [PATCH 2/5] chore: include PR requested changes --- .../Protected/Summit/OAuth2SummitsEventTypesApiController.php | 4 ++-- .../Models/{EventTypeSchemas.php => EventTypeSchema.php} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename app/Swagger/Models/{EventTypeSchemas.php => EventTypeSchema.php} (100%) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php index 55e1cee78..91dd832b0 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php @@ -722,7 +722,7 @@ public function seedDefaultEventTypesBySummit($summit_id) * @param $document_id * @return \Illuminate\Http\JsonResponse|mixed */ - #[OA\Post( + #[OA\Put( path: "/api/v1/summits/{id}/event-types/{event_type_id}/summit-documents/{document_id}", operationId: "addSummitDocument", description: "Add a document to an event type", @@ -877,4 +877,4 @@ public function removeSummitDocument($summit_id, $event_type_id, $document_id) )); }); } -} \ No newline at end of file +} diff --git a/app/Swagger/Models/EventTypeSchemas.php b/app/Swagger/Models/EventTypeSchema.php similarity index 100% rename from app/Swagger/Models/EventTypeSchemas.php rename to app/Swagger/Models/EventTypeSchema.php From 0d1777a8cdd5435b080f69d3c2d76b816ef5326a Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Wed, 10 Dec 2025 22:30:11 +0000 Subject: [PATCH 3/5] chore: Add missing doc on public endpoint --- .../OAuth2SummitsEventTypesApiController.php | 56 ++++++++++++++++--- app/Swagger/Models/EventTypeSchema.php | 20 ++----- 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php index 91dd832b0..18aff1587 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php @@ -96,7 +96,7 @@ public function __construct in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "page", @@ -230,7 +230,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "page", @@ -403,6 +403,44 @@ public function getAllBySummitCSV($summit_id) path: "/api/v1/summits/{id}/event-types/{event_type_id}", operationId: "getEventTypeBySummit", description: "Get a specific event type by ID", + tags: ["Event Types"], + parameters: [ + new OA\Parameter( + name: "id", + in: "path", + required: true, + schema: new OA\Schema(type: "string"), + description: "Summit ID" + ), + new OA\Parameter( + name: "event_type_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer", format: "int64"), + description: "Event type ID" + ), + new OA\Parameter( + name: "expand", + in: "query", + required: false, + schema: new OA\Schema(type: "string"), + description: "Expand relationships" + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "Event type retrieved successfully", + content: new OA\JsonContent(ref: "#/components/schemas/EventType") + ), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Event type or summit not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + #[OA\Get( + path: "/api/public/v1/summits/{id}/event-types/{event_type_id}", + operationId: "getEventTypeBySummitPublic", + description: "Get a specific event type by ID", tags: ["Event Types (Public)"], parameters: [ new OA\Parameter( @@ -410,7 +448,7 @@ public function getAllBySummitCSV($summit_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "event_type_id", @@ -484,7 +522,7 @@ public function getEventTypeBySummit($summit_id, $event_type_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), ], requestBody: new OA\RequestBody( @@ -549,7 +587,7 @@ public function addEventTypeBySummit($summit_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "event_type_id", @@ -621,7 +659,7 @@ public function updateEventTypeBySummit($summit_id, $event_type_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "event_type_id", @@ -680,7 +718,7 @@ public function deleteEventTypeBySummit($summit_id, $event_type_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), ], responses: [ @@ -744,7 +782,7 @@ public function seedDefaultEventTypesBySummit($summit_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "event_type_id", @@ -829,7 +867,7 @@ public function addSummitDocument($summit_id, $event_type_id, $document_id) in: "path", required: true, schema: new OA\Schema(type: "string"), - description: "Summit ID or slug" + description: "Summit ID" ), new OA\Parameter( name: "event_type_id", diff --git a/app/Swagger/Models/EventTypeSchema.php b/app/Swagger/Models/EventTypeSchema.php index 85a0e1962..0ad880ae2 100644 --- a/app/Swagger/Models/EventTypeSchema.php +++ b/app/Swagger/Models/EventTypeSchema.php @@ -1,4 +1,4 @@ - Date: Wed, 10 Dec 2025 22:44:20 +0000 Subject: [PATCH 4/5] fix: operationIds --- .../Protected/Summit/OAuth2SummitsEventTypesApiController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php index 18aff1587..ac19d3719 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php @@ -83,7 +83,7 @@ public function __construct */ #[OA\Get( path: "/api/v1/summits/{id}/event-types", - operationId: "getAllBySummit", + operationId: "getAllSummitEventTypesBySummit", description: "Get all event types for a summit with pagination and filtering", tags: ["Event Types"], security: [['summit_event_types_oauth2' => [ @@ -217,7 +217,7 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { */ #[OA\Get( path: "/api/v1/summits/{id}/event-types/csv", - operationId: "getAllBySummitCSV", + operationId: "getAllSummitEventTypesBySummitCSV", description: "Export event types for a summit as CSV", tags: ["Event Types"], security: [['summit_event_types_oauth2' => [ From cf3f50ebdd35aab47087d66e8fb18c200a38af0a Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 12 Dec 2025 20:10:33 +0000 Subject: [PATCH 5/5] chore: include PR requested changes --- .../OAuth2SummitsEventTypesApiController.php | 164 ++++++++++++------ 1 file changed, 107 insertions(+), 57 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php index ac19d3719..6b8430168 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitsEventTypesApiController.php @@ -1,4 +1,5 @@ - [ - SummitScopes::ReadSummitData, - SummitScopes::ReadAllSummitData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ] + ] + ], parameters: [ new OA\Parameter( name: "id", @@ -150,7 +155,8 @@ public function getAllBySummit($summit_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); return $this->_getAll( function () { @@ -220,10 +226,14 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) { operationId: "getAllSummitEventTypesBySummitCSV", description: "Export event types for a summit as CSV", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::ReadSummitData, - SummitScopes::ReadAllSummitData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ] + ] + ], parameters: [ new OA\Parameter( name: "id", @@ -282,7 +292,8 @@ public function getAllBySummitCSV($summit_id) try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $validation = Validator::make($values, $rules); @@ -319,7 +330,8 @@ public function getAllBySummitCSV($summit_id) ]); } - if (is_null($filter)) $filter = new Filter(); + if (is_null($filter)) + $filter = new Filter(); $filter->validate([ 'class_name' => 'sometimes|string|in:'.join(",", SummitEventTypeConstants::$valid_class_names), @@ -404,6 +416,14 @@ public function getAllBySummitCSV($summit_id) operationId: "getEventTypeBySummit", description: "Get a specific event type by ID", tags: ["Event Types"], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ] + ] + ], parameters: [ new OA\Parameter( name: "id", @@ -505,15 +525,19 @@ public function getEventTypeBySummit($summit_id, $event_type_id) operationId: "addEventTypeBySummit", description: "Create a new event type", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::WriteSummitData, - SummitScopes::WriteEventTypeData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::WriteEventTypeData, + SummitScopes::WriteSummitData, + ] + ] + ], x: [ 'required-groups' => [ - IGroup::SummitAdministrators, IGroup::SuperAdmins, - IGroup::Administrators + IGroup::Administrators, + IGroup::SummitAdministrators, ] ], parameters: [ @@ -546,7 +570,8 @@ public function addEventTypeBySummit($summit_id) return $this->processRequest(function () use ($summit_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $payload = $this->getJsonPayload(EventTypeValidationRulesFactory::build(Request::all())); @@ -570,15 +595,19 @@ public function addEventTypeBySummit($summit_id) operationId: "updateEventTypeBySummit", description: "Update an existing event type", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::WriteSummitData, - SummitScopes::WriteEventTypeData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::WriteEventTypeData, + SummitScopes::WriteSummitData, + ] + ] + ], x: [ 'required-groups' => [ - IGroup::SummitAdministrators, IGroup::SuperAdmins, - IGroup::Administrators + IGroup::Administrators, + IGroup::SummitAdministrators, ] ], parameters: [ @@ -603,7 +632,7 @@ public function addEventTypeBySummit($summit_id) ), responses: [ new OA\Response( - response: Response::HTTP_OK, + response: Response::HTTP_CREATED, description: "Event type updated successfully", content: new OA\JsonContent(ref: "#/components/schemas/EventType") ), @@ -618,7 +647,8 @@ public function updateEventTypeBySummit($summit_id, $event_type_id) return $this->processRequest(function () use ($summit_id, $event_type_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $payload = $this->getJsonPayload(EventTypeValidationRulesFactory::build(Request::all(), true)); @@ -642,15 +672,19 @@ public function updateEventTypeBySummit($summit_id, $event_type_id) operationId: "deleteEventTypeBySummit", description: "Delete an event type", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::WriteSummitData, - SummitScopes::WriteEventTypeData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::WriteEventTypeData, + SummitScopes::WriteSummitData, + ] + ] + ], x: [ 'required-groups' => [ - IGroup::SummitAdministrators, IGroup::SuperAdmins, - IGroup::Administrators + IGroup::Administrators, + IGroup::SummitAdministrators, ] ], parameters: [ @@ -684,7 +718,8 @@ public function deleteEventTypeBySummit($summit_id, $event_type_id) return $this->processRequest(function () use ($summit_id, $event_type_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $this->event_type_service->deleteEventType($summit, intval($event_type_id)); @@ -701,15 +736,19 @@ public function deleteEventTypeBySummit($summit_id, $event_type_id) operationId: "seedDefaultEventTypesBySummit", description: "Seed default event types for a summit", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::WriteSummitData, - SummitScopes::WriteEventTypeData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::WriteEventTypeData, + SummitScopes::WriteSummitData, + ] + ] + ], x: [ 'required-groups' => [ - IGroup::SummitAdministrators, IGroup::SuperAdmins, - IGroup::Administrators + IGroup::Administrators, + IGroup::SummitAdministrators, ] ], parameters: [ @@ -737,7 +776,8 @@ public function seedDefaultEventTypesBySummit($summit_id) return $this->processRequest(function () use ($summit_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $event_types = $this->event_type_service->seedDefaultEventTypes($summit); @@ -765,15 +805,19 @@ public function seedDefaultEventTypesBySummit($summit_id) operationId: "addSummitDocument", description: "Add a document to an event type", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::WriteSummitData, - SummitScopes::WriteEventTypeData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::WriteEventTypeData, + SummitScopes::WriteSummitData, + ] + ] + ], x: [ 'required-groups' => [ - IGroup::SummitAdministrators, IGroup::SuperAdmins, - IGroup::Administrators + IGroup::Administrators, + IGroup::SummitAdministrators, ] ], parameters: [ @@ -801,7 +845,7 @@ public function seedDefaultEventTypesBySummit($summit_id) ], responses: [ new OA\Response( - response: Response::HTTP_OK, + response: Response::HTTP_CREATED, description: "Document added to event type successfully", content: new OA\JsonContent(ref: "#/components/schemas/EventType") ), @@ -814,7 +858,8 @@ public function addSummitDocument($summit_id, $event_type_id, $document_id) return $this->processRequest(function () use ($summit_id, $event_type_id, $document_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $document = $this->event_type_service->addSummitDocumentToEventType @@ -843,15 +888,19 @@ public function addSummitDocument($summit_id, $event_type_id, $document_id) operationId: "removeSummitDocument", description: "Remove a document from an event type", tags: ["Event Types"], - security: [['summit_event_types_oauth2' => [ - SummitScopes::WriteSummitData, - SummitScopes::WriteEventTypeData, - ]]], + security: [ + [ + 'summit_event_types_oauth2' => [ + SummitScopes::WriteEventTypeData, + SummitScopes::WriteSummitData, + ] + ] + ], x: [ 'required-groups' => [ - IGroup::SummitAdministrators, IGroup::SuperAdmins, - IGroup::Administrators + IGroup::Administrators, + IGroup::SummitAdministrators, ] ], parameters: [ @@ -886,7 +935,7 @@ public function addSummitDocument($summit_id, $event_type_id, $document_id) ], responses: [ new OA\Response( - response: Response::HTTP_OK, + response: Response::HTTP_CREATED, description: "Document removed from event type successfully", content: new OA\JsonContent(ref: "#/components/schemas/EventType") ), @@ -899,7 +948,8 @@ public function removeSummitDocument($summit_id, $event_type_id, $document_id) return $this->processRequest(function () use ($summit_id, $event_type_id, $document_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $document = $this->event_type_service->removeSummitDocumentFromEventType (