From d486cbf70acf1fa5955603e46477d4242da74157 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Thu, 9 Oct 2025 13:08:00 -0300 Subject: [PATCH 1/5] feat: Extend Swagger Coverage for controller `OAuth2SummitSponsorshipTypeApiController` --- ...uth2SummitSponsorshipTypeApiController.php | 201 +++++++++++++++++- app/Swagger/SummitSchemas.php | 69 ++++++ 2 files changed, 269 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php index a08a52a9d..5bc262ee3 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php @@ -16,11 +16,13 @@ use App\ModelSerializers\SerializerUtils; use App\Services\Model\ISummitSponsorshipTypeService; use Illuminate\Http\Request as LaravelRequest; +use Illuminate\Http\Response; use models\oauth2\IResourceServerContext; use models\summit\ISummitRepository; use models\summit\Summit; use models\utils\IEntity; use ModelSerializers\SerializerRegistry; +use OpenApi\Attributes as OA; /** * Class OAuth2SummitSponsorshipTypeApiController @@ -69,6 +71,144 @@ public function __construct use DeleteSummitChildElement; + #[OA\Get( + path: '/api/v1/summits/{id}/sponsorships-types', + summary: 'Get all sponsorship types for a summit', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(ref: '#/components/parameters/page'), + new OA\Parameter(ref: '#/components/parameters/per_page'), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'filter', in: 'query', description: 'Filter by name, label, or size (name=@value, label==value, size=@value)', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', description: 'Order by: +/-id, +/-name, +/-order, +/-label, +/-size', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful response', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitSponsorshipTypesResponse') + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + public function getAllBySummit($summit_id){ + return parent::getAllBySummit($summit_id); + } + + #[OA\Post( + path: '/api/v1/summits/{id}/sponsorships-types', + summary: 'Create a new sponsorship type', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: '#/components/schemas/SummitSponsorshipTypeCreateRequest') + ), + responses: [ + new OA\Response( + response: Response::HTTP_CREATED, + description: 'Sponsorship type created', + content: new OA\JsonContent(ref: '#/components/schemas/SummitSponsorshipType') + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + public function add($summit_id){ + return parent::add($summit_id); + } + + #[OA\Get( + path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', + summary: 'Get a sponsorship type by ID', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful response', + content: new OA\JsonContent(ref: '#/components/schemas/SummitSponsorshipType') + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + public function get($summit_id, $type_id){ + return parent::get($summit_id, $type_id); + } + + #[OA\Put( + path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', + summary: 'Update a sponsorship type', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: '#/components/schemas/SummitSponsorshipTypeUpdateRequest') + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Sponsorship type updated', + content: new OA\JsonContent(ref: '#/components/schemas/SummitSponsorshipType') + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + public function update($summit_id, $type_id){ + return parent::update($summit_id, $type_id); + } + + #[OA\Delete( + path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', + summary: 'Delete a sponsorship type', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: "No Content"), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + public function delete($summit_id, $type_id){ + return parent::delete($summit_id, $type_id); + } + /** * @return array */ @@ -184,6 +324,47 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I * @throws \models\exceptions\EntityNotFoundException * @throws \models\exceptions\ValidationException */ + #[OA\Post( + path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', + summary: 'Upload a badge image for a sponsorship type', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: 'multipart/form-data', + schema: new OA\Schema( + required: ['file'], + properties: [ + new OA\Property(property: 'file', type: 'string', format: 'binary', description: 'Image file to upload') + ] + ) + ) + ), + responses: [ + new OA\Response( + response: Response::HTTP_CREATED, + description: 'Badge image uploaded successfully', + content: new OA\JsonContent( + properties: [ + new OA\Property(property: 'id', type: 'integer', example: 123), + new OA\Property(property: 'url', type: 'string', example: 'https://example.com/badge.png'), + new OA\Property(property: 'filename', type: 'string', example: 'badge.png'), + ] + ) + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ return $this->processRequest(function () use ($request, $summit_id, $type_id) { @@ -214,6 +395,24 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ * @throws \models\exceptions\EntityNotFoundException * @throws \models\exceptions\ValidationException */ + #[OA\Delete( + path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', + summary: 'Remove the badge image from a sponsorship type', + security: [['OAuth2' => ['openid', 'profile', 'email']]], + tags: ['Summits', 'Sponsorship Types'], + parameters: [ + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: "No Content"), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] public function removeBadgeImage($summit_id, $type_id){ return $this->processRequest(function () use ($summit_id, $type_id) { @@ -226,4 +425,4 @@ public function removeBadgeImage($summit_id, $type_id){ }); } -} \ No newline at end of file +} diff --git a/app/Swagger/SummitSchemas.php b/app/Swagger/SummitSchemas.php index 5f83d1c19..41e9eb67d 100644 --- a/app/Swagger/SummitSchemas.php +++ b/app/Swagger/SummitSchemas.php @@ -2,7 +2,9 @@ namespace App\Swagger\schemas; +use models\summit\ISponsorshipTypeConstants; use OpenApi\Attributes as OA; + #[OA\Schema( schema: 'SummitScheduleConfigContent', type: 'object', @@ -341,6 +343,73 @@ class SummitAttendeeBadgeSchema )] class PaginatedSummitAttendeeBadgesResponseSchema {} +#[OA\Schema( + schema: 'SummitSponsorshipType', + type: 'object', + properties: [ + new OA\Property(property: 'id', type: 'integer', example: 1), + new OA\Property(property: 'widget_title', type: 'string', example: 'Platinum Sponsors', nullable: true), + new OA\Property(property: 'lobby_template', type: 'string', example: 'big-header', nullable: true), + new OA\Property(property: 'expo_hall_template', type: 'string', example: 'big-images', nullable: true), + new OA\Property(property: 'sponsor_page_template', type: 'string', example: 'big-header', nullable: true), + new OA\Property(property: 'event_page_template', type: 'string', example: 'big-header', nullable: true), + new OA\Property(property: 'sponsor_page_use_disqus_widget', type: 'boolean', example: true), + new OA\Property(property: 'sponsor_page_use_live_event_widget', type: 'boolean', example: true), + new OA\Property(property: 'sponsor_page_use_schedule_widget', type: 'boolean', example: true), + new OA\Property(property: 'sponsor_page_use_banner_widget', type: 'boolean', example: true), + new OA\Property(property: 'badge_image', type: 'string', example: 'https://example.com/badge.png', nullable: true), + new OA\Property(property: 'badge_image_alt_text', type: 'string', example: 'Platinum Badge', nullable: true), + new OA\Property(property: 'order', type: 'integer', example: 1), + new OA\Property(property: 'should_display_on_expo_hall_page', type: 'boolean', example: true), + new OA\Property(property: 'should_display_on_lobby_page', type: 'boolean', example: true), + new OA\Property(property: 'summit', type: 'Summit'), + new OA\Property(property: 'type', type: 'SponsorshipType'), + ] +)] +class SummitSponsorshipTypeSchema {} + +#[OA\Schema( + schema: 'PaginatedSummitSponsorshipTypesResponse', + allOf: [ + new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'), + new OA\Schema( + type: 'object', + properties: [ + new OA\Property( + property: 'data', + type: 'array', + items: new OA\Items(ref: '#/components/schemas/SummitSponsorshipType') + ) + ] + ) + ] +)] +class PaginatedSummitSponsorshipTypesResponseSchema {} + +#[OA\Schema( + schema: 'SummitSponsorshipTypeCreateRequest', + type: 'object', + required: ['name', 'label', 'size'], + properties: [ + new OA\Property(property: 'name', type: 'string', example: 'platinum'), + new OA\Property(property: 'label', type: 'string', example: 'Platinum'), + new OA\Property(property: 'size', type: 'string', example: ISponsorshipTypeConstants::BigSize, enum: ISponsorshipTypeConstants::AllowedSizes), + ] +)] +class SummitSponsorshipTypeCreateRequestSchema {} + +#[OA\Schema( + schema: 'SummitSponsorshipTypeUpdateRequest', + type: 'object', + properties: [ + new OA\Property(property: 'name', type: 'string', example: 'platinum'), + new OA\Property(property: 'label', type: 'string', example: 'Platinum'), + new OA\Property(property: 'size', type: 'string', example: ISponsorshipTypeConstants::BigSize, enum: ISponsorshipTypeConstants::AllowedSizes), + new OA\Property(property: 'order', type: 'integer', example: 1, minimum: 1), + ] +)] +class SummitSponsorshipTypeUpdateRequestSchema {} + #[OA\Schema( schema: 'SummitMediaFileType', type: 'object', From 32f4dc815ca2de3600842c88053c20786af4ffc0 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 14 Oct 2025 14:48:42 -0300 Subject: [PATCH 2/5] fix: Change "namespace" word positioning --- .../Summit/OAuth2SummitSponsorshipTypeApiController.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php index 5bc262ee3..daa17182f 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php @@ -1,4 +1,7 @@ - Date: Thu, 13 Nov 2025 20:37:12 +0000 Subject: [PATCH 3/5] feat: Extend Swagger Coverage for controller `OAuth2SummitPresentationActionTypeApiController` --- ...uth2SummitSponsorshipTypeApiController.php | 101 +++++++++++++++--- .../Security/SponsorshipTypesAuthSchema.php | 26 +++++ 2 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 app/Swagger/Security/SponsorshipTypesAuthSchema.php diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php index daa17182f..28e86d798 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php @@ -15,8 +15,10 @@ * limitations under the License. **/ +use App\Models\Foundation\Main\IGroup; use App\Models\Foundation\Summit\Repositories\ISummitSponsorshipTypeRepository; use App\ModelSerializers\SerializerUtils; +use App\Security\SummitScopes; use App\Services\Model\ISummitSponsorshipTypeService; use Illuminate\Http\Request as LaravelRequest; use Illuminate\Http\Response; @@ -77,11 +79,21 @@ public function __construct #[OA\Get( path: '/api/v1/summits/{id}/sponsorships-types', summary: 'Get all sponsorship types for a summit', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ - new OA\Parameter(ref: '#/components/parameters/page'), - new OA\Parameter(ref: '#/components/parameters/per_page'), + 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, maximum: 100)), new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'filter', in: 'query', description: 'Filter by name, label, or size (name=@value, label==value, size=@value)', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'order', in: 'query', description: 'Order by: +/-id, +/-name, +/-order, +/-label, +/-size', schema: new OA\Schema(type: 'string')), @@ -106,8 +118,17 @@ public function getAllBySummit($summit_id){ #[OA\Post( path: '/api/v1/summits/{id}/sponsorships-types', summary: 'Create a new sponsorship type', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), ], @@ -136,8 +157,18 @@ public function add($summit_id){ #[OA\Get( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Get a sponsorship type by ID', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), @@ -162,8 +193,17 @@ public function get($summit_id, $type_id){ #[OA\Put( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Update a sponsorship type', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), @@ -193,8 +233,17 @@ public function update($summit_id, $type_id){ #[OA\Delete( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Delete a sponsorship type', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), @@ -330,8 +379,17 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I #[OA\Post( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', summary: 'Upload a badge image for a sponsorship type', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), @@ -401,8 +459,17 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ #[OA\Delete( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', summary: 'Remove the badge image from a sponsorship type', - security: [['OAuth2' => ['openid', 'profile', 'email']]], - tags: ['Summits', 'Sponsorship Types'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + security: [['sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Sponsorship Type ID', schema: new OA\Schema(type: 'integer')), @@ -428,4 +495,4 @@ public function removeBadgeImage($summit_id, $type_id){ }); } -} \ No newline at end of file +} diff --git a/app/Swagger/Security/SponsorshipTypesAuthSchema.php b/app/Swagger/Security/SponsorshipTypesAuthSchema.php new file mode 100644 index 000000000..352f41dd8 --- /dev/null +++ b/app/Swagger/Security/SponsorshipTypesAuthSchema.php @@ -0,0 +1,26 @@ + 'Read Summit Data', + SummitScopes::ReadAllSummitData => 'Read All Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + ], + ), + ], + ) +] +class SponsorshipTypesAuthSchema{} From 914948281aa72c553a3c567e4761746ce0ae1f28 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 2 Dec 2025 21:49:33 +0000 Subject: [PATCH 4/5] chore: add operationId and fix namespace in security schema --- ...uth2SummitSponsorshipTypeApiController.php | 118 ++++++++++++------ .../Security/SponsorshipTypesAuthSchema.php | 36 +++--- 2 files changed, 99 insertions(+), 55 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php index 28e86d798..87fd93871 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php @@ -33,8 +33,7 @@ * Class OAuth2SummitSponsorshipTypeApiController * @package App\Http\Controllers */ -final class OAuth2SummitSponsorshipTypeApiController - extends OAuth2ProtectedController +final class OAuth2SummitSponsorshipTypeApiController extends OAuth2ProtectedController { /** * @var ISummitRepository @@ -58,8 +57,7 @@ public function __construct ISummitSponsorshipTypeRepository $repository, ISummitSponsorshipTypeService $service, IResourceServerContext $resource_server_context - ) - { + ) { $this->service = $service; $this->repository = $repository; $this->summit_repository = $summit_repository; @@ -79,6 +77,7 @@ public function __construct #[OA\Get( path: '/api/v1/summits/{id}/sponsorships-types', summary: 'Get all sponsorship types for a summit', + operationId: 'getAllSponsorshipTypes', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -86,10 +85,14 @@ public function __construct IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::ReadSummitData, - SummitScopes::ReadAllSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), @@ -111,13 +114,15 @@ public function __construct new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function getAllBySummit($summit_id){ + public function getAllBySummit($summit_id) + { return parent::getAllBySummit($summit_id); } #[OA\Post( path: '/api/v1/summits/{id}/sponsorships-types', summary: 'Create a new sponsorship type', + operationId: 'createSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -125,9 +130,13 @@ public function getAllBySummit($summit_id){ IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::WriteSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), @@ -150,13 +159,15 @@ public function getAllBySummit($summit_id){ new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function add($summit_id){ + public function add($summit_id) + { return parent::add($summit_id); } #[OA\Get( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Get a sponsorship type by ID', + operationId: 'getSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -164,10 +175,14 @@ public function add($summit_id){ IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::ReadSummitData, - SummitScopes::ReadAllSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::ReadSummitData, + SummitScopes::ReadAllSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), @@ -186,13 +201,15 @@ public function add($summit_id){ new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function get($summit_id, $type_id){ + public function get($summit_id, $type_id) + { return parent::get($summit_id, $type_id); } #[OA\Put( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Update a sponsorship type', + operationId: 'updateSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -200,9 +217,13 @@ public function get($summit_id, $type_id){ IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::WriteSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), @@ -226,13 +247,15 @@ public function get($summit_id, $type_id){ new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function update($summit_id, $type_id){ + public function update($summit_id, $type_id) + { return parent::update($summit_id, $type_id); } #[OA\Delete( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Delete a sponsorship type', + operationId: 'deleteSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -240,9 +263,13 @@ public function update($summit_id, $type_id){ IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::WriteSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), @@ -257,7 +284,8 @@ public function update($summit_id, $type_id){ new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function delete($summit_id, $type_id){ + public function delete($summit_id, $type_id) + { return parent::delete($summit_id, $type_id); } @@ -343,7 +371,7 @@ protected function deleteChild(Summit $summit, $child_id): void */ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity { - return $summit->getSummitSponsorshipTypeById(intval($child_id)); + return $summit->getSummitSponsorshipTypeById(intval($child_id)); } /** @@ -363,7 +391,7 @@ function getUpdateValidationRules(array $payload): array */ protected function updateChild(Summit $summit, int $child_id, array $payload): IEntity { - return $this->service->update($summit,$child_id, $payload); + return $this->service->update($summit, $child_id, $payload); } use RequestProcessor; @@ -379,6 +407,7 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I #[OA\Post( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', summary: 'Upload a badge image for a sponsorship type', + operationId: 'addSponsorshipTypeBadgeImage', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -386,9 +415,13 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::WriteSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), @@ -426,11 +459,13 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ + public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id) + { return $this->processRequest(function () use ($request, $summit_id, $type_id) { $summit = SummitFinderStrategyFactory::build($this->getSummitRepository(), $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $file = $request->file('file'); if (is_null($file)) { @@ -459,6 +494,7 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ #[OA\Delete( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', summary: 'Remove the badge image from a sponsorship type', + operationId: 'deleteSponsorshipTypeBadgeImage', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -466,9 +502,13 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ IGroup::SummitAdministrators, ] ], - security: [['sponsorship_types_oauth2' => [ - SummitScopes::WriteSummitData, - ]]], + security: [ + [ + 'sponsorship_types_oauth2' => [ + SummitScopes::WriteSummitData, + ] + ] + ], tags: ['Summits Sponsorship Types'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')), @@ -483,11 +523,13 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){ new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] - public function removeBadgeImage($summit_id, $type_id){ + public function removeBadgeImage($summit_id, $type_id) + { return $this->processRequest(function () use ($summit_id, $type_id) { $summit = SummitFinderStrategyFactory::build($this->getSummitRepository(), $this->resource_server_context)->find($summit_id); - if (is_null($summit)) return $this->error404(); + if (is_null($summit)) + return $this->error404(); $this->service->deleteBadgeImage($summit, $type_id); diff --git a/app/Swagger/Security/SponsorshipTypesAuthSchema.php b/app/Swagger/Security/SponsorshipTypesAuthSchema.php index 352f41dd8..8fb621eb7 100644 --- a/app/Swagger/Security/SponsorshipTypesAuthSchema.php +++ b/app/Swagger/Security/SponsorshipTypesAuthSchema.php @@ -1,26 +1,28 @@ 'Read Summit Data', - SummitScopes::ReadAllSummitData => 'Read All Summit Data', - SummitScopes::WriteSummitData => 'Write Summit Data', - ], - ), - ], - ) + type: 'oauth2', + securityScheme: 'sponsorship_types_oauth2', + flows: [ + new OA\Flow( + authorizationUrl: L5_SWAGGER_CONST_AUTH_URL, + tokenUrl: L5_SWAGGER_CONST_TOKEN_URL, + flow: 'authorizationCode', + scopes: [ + SummitScopes::ReadSummitData => 'Read Summit Data', + SummitScopes::ReadAllSummitData => 'Read All Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + ], + ), + ], +) ] -class SponsorshipTypesAuthSchema{} +class SponsorshipTypesAuthSchema +{ +} From d111df849de8617ebbd98cc3c3fc0a7ec1bbd6e8 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Mon, 29 Dec 2025 20:00:38 +0000 Subject: [PATCH 5/5] fix: merge conflicts and repeated operationId Signed-off-by: Matias Perrone --- ...uth2SummitSponsorshipTypeApiController.php | 14 +++++----- app/Swagger/SummitSchemas.php | 24 ----------------- app/Swagger/SummitSponsorshipSchemas.php | 26 ------------------- 3 files changed, 7 insertions(+), 57 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php index 87fd93871..dcce2b47f 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSponsorshipTypeApiController.php @@ -77,7 +77,7 @@ public function __construct #[OA\Get( path: '/api/v1/summits/{id}/sponsorships-types', summary: 'Get all sponsorship types for a summit', - operationId: 'getAllSponsorshipTypes', + operationId: 'getSummitAllSponsorshipTypes', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -122,7 +122,7 @@ public function getAllBySummit($summit_id) #[OA\Post( path: '/api/v1/summits/{id}/sponsorships-types', summary: 'Create a new sponsorship type', - operationId: 'createSponsorshipType', + operationId: 'createSummitSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -167,7 +167,7 @@ public function add($summit_id) #[OA\Get( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Get a sponsorship type by ID', - operationId: 'getSponsorshipType', + operationId: 'getSummitSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -209,7 +209,7 @@ public function get($summit_id, $type_id) #[OA\Put( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Update a sponsorship type', - operationId: 'updateSponsorshipType', + operationId: 'updateSummitSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -255,7 +255,7 @@ public function update($summit_id, $type_id) #[OA\Delete( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}', summary: 'Delete a sponsorship type', - operationId: 'deleteSponsorshipType', + operationId: 'deleteSummitSponsorshipType', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -407,7 +407,7 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I #[OA\Post( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', summary: 'Upload a badge image for a sponsorship type', - operationId: 'addSponsorshipTypeBadgeImage', + operationId: 'addSummitSponsorshipTypeBadgeImage', x: [ 'required-groups' => [ IGroup::SuperAdmins, @@ -494,7 +494,7 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id) #[OA\Delete( path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image', summary: 'Remove the badge image from a sponsorship type', - operationId: 'deleteSponsorshipTypeBadgeImage', + operationId: 'deleteSummitSponsorshipTypeBadgeImage', x: [ 'required-groups' => [ IGroup::SuperAdmins, diff --git a/app/Swagger/SummitSchemas.php b/app/Swagger/SummitSchemas.php index 41e9eb67d..78d9f4fbd 100644 --- a/app/Swagger/SummitSchemas.php +++ b/app/Swagger/SummitSchemas.php @@ -343,30 +343,6 @@ class SummitAttendeeBadgeSchema )] class PaginatedSummitAttendeeBadgesResponseSchema {} -#[OA\Schema( - schema: 'SummitSponsorshipType', - type: 'object', - properties: [ - new OA\Property(property: 'id', type: 'integer', example: 1), - new OA\Property(property: 'widget_title', type: 'string', example: 'Platinum Sponsors', nullable: true), - new OA\Property(property: 'lobby_template', type: 'string', example: 'big-header', nullable: true), - new OA\Property(property: 'expo_hall_template', type: 'string', example: 'big-images', nullable: true), - new OA\Property(property: 'sponsor_page_template', type: 'string', example: 'big-header', nullable: true), - new OA\Property(property: 'event_page_template', type: 'string', example: 'big-header', nullable: true), - new OA\Property(property: 'sponsor_page_use_disqus_widget', type: 'boolean', example: true), - new OA\Property(property: 'sponsor_page_use_live_event_widget', type: 'boolean', example: true), - new OA\Property(property: 'sponsor_page_use_schedule_widget', type: 'boolean', example: true), - new OA\Property(property: 'sponsor_page_use_banner_widget', type: 'boolean', example: true), - new OA\Property(property: 'badge_image', type: 'string', example: 'https://example.com/badge.png', nullable: true), - new OA\Property(property: 'badge_image_alt_text', type: 'string', example: 'Platinum Badge', nullable: true), - new OA\Property(property: 'order', type: 'integer', example: 1), - new OA\Property(property: 'should_display_on_expo_hall_page', type: 'boolean', example: true), - new OA\Property(property: 'should_display_on_lobby_page', type: 'boolean', example: true), - new OA\Property(property: 'summit', type: 'Summit'), - new OA\Property(property: 'type', type: 'SponsorshipType'), - ] -)] -class SummitSponsorshipTypeSchema {} #[OA\Schema( schema: 'PaginatedSummitSponsorshipTypesResponse', diff --git a/app/Swagger/SummitSponsorshipSchemas.php b/app/Swagger/SummitSponsorshipSchemas.php index e7ee8acfe..b17bcd16a 100644 --- a/app/Swagger/SummitSponsorshipSchemas.php +++ b/app/Swagger/SummitSponsorshipSchemas.php @@ -79,29 +79,3 @@ class AddAddOnRequestSchema {} ] )] class UpdateAddOnRequestSchema {} - -#[OA\Schema( - title: "Summit Sponsorship Type", - description: "Summit Sponsorship Type Schema", - type: "object", - properties: [ - new OA\Property(property: "id", type: "integer", format: "int64"), - new OA\Property(property: "widget_title", type: "string"), - new OA\Property(property: "lobby_template", type: "string"), - new OA\Property(property: "expo_hall_template", type: "string"), - new OA\Property(property: "sponsor_page_template", type: "string"), - new OA\Property(property: "event_page_template", type: "string"), - new OA\Property(property: "sponsor_page_use_disqus_widget", type: "boolean"), - new OA\Property(property: "sponsor_page_use_live_event_widget", type: "boolean"), - new OA\Property(property: "sponsor_page_use_schedule_widget", type: "boolean"), - new OA\Property(property: "sponsor_page_use_banner_widget", type: "boolean"), - new OA\Property(property: "type_id", type: "integer", format: "int64"), - new OA\Property(property: "badge_image", type: "string"), - new OA\Property(property: "badge_image_alt_text", type: "string"), - new OA\Property(property: "summit_id", type: "integer", format: "int64"), - new OA\Property(property: "order", type: "integer", format: "int32"), - new OA\Property(property: "should_display_on_expo_hall_page", type: "boolean"), - new OA\Property(property: "should_display_on_lobby_page", type: "boolean"), - ] -)] -class SummitSponsorshipTypeSchemas {}