From 789dd45e5235994e553fa1f7d0aac095946b432b Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 24 Oct 2025 15:30:13 -0300 Subject: [PATCH 1/5] feat: Extend Swagger Coverage for controller `OAuth2SummitTicketApiController` --- .../OAuth2SummitTicketApiController.php | 608 +++++++++++++++--- app/Swagger/SummitRegistrationSchemas.php | 83 ++- 2 files changed, 597 insertions(+), 94 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php index ccb405c34..f4cf18dcf 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php @@ -21,8 +21,10 @@ use App\Rules\Boolean; use App\Services\Model\ISummitOrderService; use Illuminate\Http\Request as LaravelRequest; +use Illuminate\Http\Response; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Request; +use OpenApi\Attributes as OA; use models\exceptions\EntityNotFoundException; use models\exceptions\ValidationException; use models\oauth2\IResourceServerContext; @@ -104,10 +106,65 @@ public function __construct } - /** - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets', + summary: 'Get all tickets for a summit', + description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', 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, maximum: 100)), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by number, owner_name, owner_email, status, ticket_type_id, etc.', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by id, number, status, owner_name, etc.', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand relationships', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'not_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'status', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Filter by ticket status, allowed values: Reserved, Cancelled, Confirmed, Paid, Error'), + new OA\Parameter(name: 'number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order_number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_first_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_last_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_email', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_company', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'summit_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'owner_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'order_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'is_active', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'has_requested_refund_requests', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'access_level_type_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'access_level_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'ticket_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'view_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_owner', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'owner_status', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Filter by owner status, allowed values: Complete, Incomplete'), + new OA\Parameter(name: 'has_badge', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'promo_code_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'promo_code', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'promo_code_description', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'promo_code_tag_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'promo_code_tag', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'final_amount', in: 'query', required: false, schema: new OA\Schema(type: 'numeric')), + new OA\Parameter(name: 'is_printable', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'badge_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_badge_prints', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'badge_prints_count', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_owner_company', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'exclude_is_printable_free_unassigned', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful operation', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeTicketsResponse') + ), + 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_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getAllBySummit($summit_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); @@ -228,10 +285,28 @@ function () { }); } - /** - * @param $summit_id - * @return mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/external', + summary: 'Get external ticket data', + description: 'Returns ticket data from external registration feed by owner email', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'filter', in: 'query', required: true, description: 'Filter by owner_email', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful operation', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeTicketsResponse') + ), + 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_NOT_FOUND, description: 'Summit not found'), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: 'Summit has no external feed'), + ] + )] public function getAllBySummitExternal($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -285,10 +360,68 @@ function () { }); } - /** - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/csv', + summary: 'Get all tickets for a summit', + description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', 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, maximum: 100)), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by number, owner_name, owner_email, status, ticket_type_id, etc.', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by id, number, status, owner_name, etc.', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand relationships', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'not_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'status', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Filter by ticket status, allowed values: Reserved, Cancelled, Confirmed, Paid, Error'), + new OA\Parameter(name: 'number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order_number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_first_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_last_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_email', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'owner_company', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'summit_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'owner_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'order_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'is_active', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'has_requested_refund_requests', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'access_level_type_name', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'access_level_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'ticket_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'view_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_owner', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'owner_status', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Filter by owner status, allowed values: Complete, Incomplete'), + new OA\Parameter(name: 'has_badge', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'promo_code_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'promo_code', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'promo_code_description', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'promo_code_tag_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'promo_code_tag', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'final_amount', in: 'query', required: false, schema: new OA\Schema(type: 'numeric')), + new OA\Parameter(name: 'is_printable', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'badge_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_badge_prints', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'badge_prints_count', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_owner_company', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'exclude_is_printable_free_unassigned', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful operation', + content: new OA\MediaType( + mediaType: 'text/csv', + schema: new OA\Schema(type: 'string', format: 'binary') + ) + ), + 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_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getAllBySummitCSV($summit_id) { return $this->withReplica(function() use ($summit_id) { @@ -355,15 +488,15 @@ function () { 'access_level_type_name' => 'sometimes|string', 'access_level_type_id' => 'sometimes|integer', 'ticket_type_id' => 'sometimes|integer', + 'view_type_id' => 'sometimes|integer', 'has_owner' => 'sometimes|boolean', 'owner_status' => 'sometimes|string|in:' . implode(',', SummitAttendee::AllowedStatus), 'has_badge' => 'sometimes|boolean', - 'view_type_id' => 'sometimes|integer', 'promo_code_id' => 'sometimes|integer', 'promo_code' => 'sometimes|string', - 'promo_code_tag' => 'sometimes|string', 'promo_code_description' => 'sometimes|string', 'promo_code_tag_id' => 'sometimes|integer', + 'promo_code_tag' => 'sometimes|string', 'final_amount' => 'sometimes|numeric', 'is_printable' => ['sometimes', new Boolean()], 'badge_type_id' => 'sometimes|integer', @@ -491,10 +624,26 @@ function($data, $serializerParams) use($questions){ }); } - /** - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: '/api/v1/summits/{summit_id}/tickets/ingest', + summary: 'Ingest external ticket data', + description: 'Triggers ingestion of ticket data from external registration feed', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody( + required: false, + content: new OA\JsonContent(ref: '#/components/schemas/IngestExternalTicketDataRequest') + ), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Ingestion process started successfully'), + 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: 'Summit not found'), + ] + )] public function ingestExternalTicketData($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -516,10 +665,25 @@ public function ingestExternalTicketData($summit_id) }); } - /** - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/import-template', + summary: 'Get ticket import template', + description: 'Returns a CSV template for importing ticket data', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_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: 'CSV template', + content: new OA\MediaType(mediaType: 'text/csv', schema: new OA\Schema(type: 'string')) + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit not found'), + ] + )] public function getImportTicketDataTemplate($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -581,11 +745,35 @@ public function getImportTicketDataTemplate($summit_id) }); } - /** - * @param LaravelRequest $request - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Post( + path: '/api/v1/summits/{summit_id}/tickets/import', + summary: 'Import ticket data from CSV', + description: 'Imports ticket data from a CSV file', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + ], + 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: 'CSV file to import') + ] + ) + ) + ), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: 'Import process started successfully'), + 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: 'Summit not found'), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: 'File parameter not set'), + ] + )] public function importTicketData(LaravelRequest $request, $summit_id) { @@ -609,14 +797,70 @@ public function importTicketData(LaravelRequest $request, $summit_id) }); } - /** - * @return mixed - */ + #[OA\Get( + path: '/api/v1/summits/all/tickets/me', + summary: 'Get all my tickets across all summits', + description: 'Returns all tickets owned by the current user across all summits', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + 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: 'filter', in: 'query', required: false, description: 'Filter by number, order_number, status, etc.', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by id, number, status, created', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand relationships', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful operation', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeTicketsResponse') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + ] + )] public function getAllMyTickets() { return $this->getAllMyTicketsBySummit('all'); } + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/me', + summary: 'Get my tickets for a summit', + description: 'Returns all tickets owned by the current user for a specific summit', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', 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, maximum: 100)), + new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by number, order_number, status, etc.', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order', in: 'query', required: false, description: 'Order by id, number, status, created', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand relationships', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order_number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'order_owner_email', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'summit_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'order_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'order_owner_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'has_order_owner', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), + new OA\Parameter(name: 'status', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Valid values: Reserved, Cancelled, Confirmed, Paid, Error'), + new OA\Parameter(name: 'final_amount', in: 'query', required: false, schema: new OA\Schema(type: 'numeric')), + new OA\Parameter(name: 'assigned_to', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Valid values: Me, SomeoneElse, Nobody'), + new OA\Parameter(name: 'owner_status', in: 'query', required: false, schema: new OA\Schema(type: 'string'), description: 'Valid values: Complete, Incomplete'), + new OA\Parameter(name: 'badge_features_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'ticket_type_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'promo_code', in: 'query', required: false, schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful operation', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeTicketsResponse') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + ] + )] public function getAllMyTicketsBySummit($summit_id) { $owner = $this->getResourceServerContext()->getCurrentUser(); @@ -715,11 +959,32 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity } - /** - * @param $summit_id - * @param $ticket_id - * @return mixed - */ + #[OA\Delete( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/refund', + summary: 'Refund a ticket', + description: 'Processes a refund for a specific ticket', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: '#/components/schemas/RefundTicketRequest') + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Ticket refunded successfully', + content: new OA\JsonContent(type: 'object') + ), + 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: 'Summit or ticket not found'), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: 'Validation Error'), + ] + )] public function refundTicket($summit_id, $ticket_id) { return $this->processRequest(function () use ($summit_id, $ticket_id) { @@ -757,11 +1022,27 @@ public function refundTicket($summit_id, $ticket_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + summary: 'Get ticket badge', + description: 'Returns the badge associated with a ticket', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID or number', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand relationships', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Successful operation', + content: new OA\JsonContent(schema: 'SummitAttendeeBadge') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, ticket or badge not found'), + ] + )] public function getAttendeeBadge($summit_id, $ticket_id) { return $this->processRequest(function () use ($summit_id, $ticket_id) { @@ -784,11 +1065,30 @@ public function getAttendeeBadge($summit_id, $ticket_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Post( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + summary: 'Create ticket badge', + description: 'Creates a badge for a specific ticket', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + ], + requestBody: new OA\RequestBody( + required: false, + content: new OA\JsonContent(ref: '#/components/schemas/CreateBadgeRequest') + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Badge created successfully', + content: new OA\JsonContent(type: 'object') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit or ticket not found'), + ] + )] public function createAttendeeBadge($summit_id, $ticket_id) { return $this->processRequest(function () use ($summit_id, $ticket_id) { @@ -809,11 +1109,22 @@ public function createAttendeeBadge($summit_id, $ticket_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Delete( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + summary: 'Delete ticket badge', + description: 'Deletes the badge associated with a ticket', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: 'Badge deleted successfully'), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, ticket or badge not found'), + ] + )] public function deleteAttendeeBadge($summit_id, $ticket_id) { return $this->processRequest(function () use ($summit_id, $ticket_id) { @@ -824,12 +1135,27 @@ public function deleteAttendeeBadge($summit_id, $ticket_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @param $type_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/type/{type_id}', + summary: 'Update badge type', + description: 'Updates the badge type for a ticket', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Badge Type ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Badge type updated successfully', + content: new OA\JsonContent(type: 'object') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, ticket or badge type not found'), + ] + )] public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) { return $this->processRequest(function () use ($summit_id, $ticket_id, $type_id) { @@ -845,12 +1171,27 @@ public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @param $feature_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', + summary: 'Add badge feature', + description: 'Adds a feature to a ticket badge', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'feature_id', in: 'path', required: true, description: 'Feature ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Feature added successfully', + content: new OA\JsonContent(type: 'object') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, ticket or feature not found'), + ] + )] public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) { return $this->processRequest(function () use ($summit_id, $ticket_id, $feature_id) { @@ -866,12 +1207,27 @@ public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @param $feature_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Delete( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', + summary: 'Remove badge feature', + description: 'Removes a feature from a ticket badge', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'feature_id', in: 'path', required: true, description: 'Feature ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Feature removed successfully', + content: new OA\JsonContent(type: 'object') + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: 'Unauthorized'), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: 'Summit, ticket or feature not found'), + ] + )] public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) { return $this->processRequest(function () use ($summit_id, $ticket_id, $feature_id) { @@ -887,11 +1243,31 @@ public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) }); } - /** - * @param $summit_id - * @param $ticket_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/print', + summary: 'Print badge with default view', + description: 'Prints a badge using the summit\'s default view type', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + ], + requestBody: new OA\RequestBody( + required: false, + content: new OA\JsonContent(ref: '#/components/schemas/PrintBadgeRequest') + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Badge printed successfully', + content: new OA\JsonContent(type: 'object') + ), + 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: 'Summit, ticket or default view type not found'), + ] + )] public function printAttendeeBadgeDefault($summit_id, $ticket_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); @@ -904,12 +1280,32 @@ public function printAttendeeBadgeDefault($summit_id, $ticket_id) return $this->printAttendeeBadge($summit_id, $ticket_id, $viewType->getName()); } - /** - * @param $summit_id - * @param $ticket_id - * @param $view_type - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/print', + summary: 'Print badge with specific view type', + description: 'Prints a badge using a specific view type', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'view_type', in: 'path', required: true, description: 'View type name', schema: new OA\Schema(type: 'string')), + ], + requestBody: new OA\RequestBody( + required: false, + content: new OA\JsonContent(ref: '#/components/schemas/PrintBadgeRequest') + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Badge printed successfully', + content: new OA\JsonContent(type: 'object') + ), + 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: 'Summit, ticket or view type not found'), + ] + )] public function printAttendeeBadge($summit_id, $ticket_id, $view_type) { return $this->processRequest(function () use ($summit_id, $ticket_id, $view_type) { @@ -939,11 +1335,27 @@ public function printAttendeeBadge($summit_id, $ticket_id, $view_type) }); } - /** - * @param $summit_id - * @param $ticket_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/can-print', + summary: 'Check if badge can be printed (default view)', + description: 'Checks if a badge can be printed using the default view type', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Badge printability status', + content: new OA\JsonContent(type: 'object') + ), + 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: 'Summit or ticket not found'), + ] + )] public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); @@ -956,12 +1368,28 @@ public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) return $this->canPrintAttendeeBadge($summit_id, $ticket_id, $viewType->getName()); } - /** - * @param $summit_id - * @param $ticket_id - * @param $view_type - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/can-print', + summary: 'Check if badge can be printed (specific view)', + description: 'Checks if a badge can be printed using a specific view type', + security: [['bearer' => []]], + tags: ['tickets'], + parameters: [ + new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), + new OA\Parameter(name: 'view_type', in: 'path', required: true, description: 'View type name', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: 'Badge printability status', + content: new OA\JsonContent(type: 'object') + ), + 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: 'Summit, ticket or view type not found'), + ] + )] public function canPrintAttendeeBadge($summit_id, $ticket_id, $view_type) { return $this->processRequest(function () use ($summit_id, $ticket_id, $view_type) { diff --git a/app/Swagger/SummitRegistrationSchemas.php b/app/Swagger/SummitRegistrationSchemas.php index 2d2860b2a..df0b1880a 100644 --- a/app/Swagger/SummitRegistrationSchemas.php +++ b/app/Swagger/SummitRegistrationSchemas.php @@ -57,7 +57,76 @@ class SummitBadgeTypeUpdateRequest { } -// +#[OA\Schema( + schema: 'PaginatedSummitAttendeeTicketsResponse', + 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(type: 'SummitAttendeeTicket') + ) + ] + ) + ] +)] +class PaginatedSummitAttendeeTicketsResponse +{ +} + +#[OA\Schema( + schema: 'RefundTicketRequest', + type: 'object', + required: ['amount'], + properties: [ + new OA\Property(property: 'amount', type: 'number', format: 'float', description: 'Amount to refund'), + new OA\Property(property: 'notes', type: 'string', maxLength: 255, description: 'Refund notes'), + ] +)] +class RefundTicketRequest +{ +} + +#[OA\Schema( + schema: 'CreateBadgeRequest', + type: 'object', + properties: [ + new OA\Property(property: 'badge_type_id', type: 'integer'), + new OA\Property( + property: 'features', + type: 'array', + items: new OA\Items(type: 'integer') + ), + ] +)] +class CreateBadgeRequest +{ +} + +#[OA\Schema( + schema: 'PrintBadgeRequest', + type: 'object', + properties: [ + new OA\Property(property: 'check_in', type: 'boolean'), + ] +)] +class PrintBadgeRequest +{ +} + +#[OA\Schema( + schema: 'IngestExternalTicketDataRequest', + type: 'object', + properties: [ + new OA\Property(property: 'email_to', type: 'string', format: 'email'), + ] +)] +class IngestExternalTicketDataRequest +{ +} // Summit Badge Feature Types @@ -77,7 +146,9 @@ class SummitBadgeTypeUpdateRequest ) ] )] -class PaginatedSummitBadgeFeatureTypesResponseSchema {} +class PaginatedSummitBadgeFeatureTypesResponseSchema +{ +} #[OA\Schema( schema: 'SummitBadgeFeatureTypeCreateRequest', @@ -89,7 +160,9 @@ class PaginatedSummitBadgeFeatureTypesResponseSchema {} new OA\Property(property: 'template_content', type: 'string', example: '
{{name}}
'), ] )] -class SummitBadgeFeatureTypeCreateRequestSchema {} +class SummitBadgeFeatureTypeCreateRequestSchema +{ +} #[OA\Schema( schema: 'SummitBadgeFeatureTypeUpdateRequest', @@ -100,4 +173,6 @@ class SummitBadgeFeatureTypeCreateRequestSchema {} new OA\Property(property: 'template_content', type: 'string', example: '
{{name}}
'), ] )] -class SummitBadgeFeatureTypeUpdateRequestSchema {} +class SummitBadgeFeatureTypeUpdateRequestSchema +{ +} \ No newline at end of file From 9a487528b5303e02b84eadd32aed26efa548b780 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 5 Dec 2025 19:36:55 +0000 Subject: [PATCH 2/5] fix: Add security schema, also security and x.required-groups fields --- .../OAuth2SummitTicketApiController.php | 199 ++++++++++++++++-- .../Security/SummitTicketsAuthSchema.php | 29 +++ 2 files changed, 209 insertions(+), 19 deletions(-) create mode 100644 app/Swagger/Security/SummitTicketsAuthSchema.php diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php index f4cf18dcf..7dd5e9995 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php @@ -15,10 +15,12 @@ use App\Http\Utils\BooleanCellFormatter; use App\Http\Utils\EpochCellFormatter; use App\libs\Utils\Doctrine\ReplicaAwareTrait; +use App\Models\Foundation\Main\IGroup; use App\Models\Foundation\Summit\Registration\ISummitExternalRegistrationFeedType; use App\ModelSerializers\ISummitAttendeeTicketSerializerTypes; use App\ModelSerializers\SerializerUtils; use App\Rules\Boolean; +use App\Security\SummitScopes; use App\Services\Model\ISummitOrderService; use Illuminate\Http\Request as LaravelRequest; use Illuminate\Http\Response; @@ -110,7 +112,17 @@ public function __construct path: '/api/v1/summits/{summit_id}/tickets', summary: 'Get all tickets for a summit', description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationOrders, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + IGroup::BadgePrinters, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -289,7 +301,13 @@ function () { path: '/api/v1/summits/{summit_id}/tickets/external', summary: 'Get external ticket data', description: 'Returns ticket data from external registration feed by owner email', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationOrders, + ]]], + x: ['required-groups' => [ + IGroup::BadgePrinters, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -364,7 +382,16 @@ function () { path: '/api/v1/summits/{summit_id}/tickets/csv', summary: 'Get all tickets for a summit', description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationOrders, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -628,7 +655,16 @@ function($data, $serializerParams) use($questions){ path: '/api/v1/summits/{summit_id}/tickets/ingest', summary: 'Ingest external ticket data', description: 'Triggers ingestion of ticket data from external registration feed', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationData, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -669,7 +705,16 @@ public function ingestExternalTicketData($summit_id) path: '/api/v1/summits/{summit_id}/tickets/import-template', summary: 'Get ticket import template', description: 'Returns a CSV template for importing ticket data', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationData, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -749,7 +794,16 @@ public function getImportTicketDataTemplate($summit_id) path: '/api/v1/summits/{summit_id}/tickets/import', summary: 'Import ticket data from CSV', description: 'Imports ticket data from a CSV file', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationData, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -801,7 +855,9 @@ public function importTicketData(LaravelRequest $request, $summit_id) path: '/api/v1/summits/all/tickets/me', summary: 'Get all my tickets across all summits', description: 'Returns all tickets owned by the current user across all summits', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadMyRegistrationOrders, + ]]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'page', in: 'query', required: false, description: 'Page number', schema: new OA\Schema(type: 'integer', default: 1)), @@ -828,7 +884,9 @@ public function getAllMyTickets() path: '/api/v1/summits/{summit_id}/tickets/me', summary: 'Get my tickets for a summit', description: 'Returns all tickets owned by the current user for a specific summit', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadMyRegistrationOrders, + ]]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -963,7 +1021,16 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/refund', summary: 'Refund a ticket', description: 'Processes a refund for a specific ticket', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::UpdateRegistrationOrders, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1026,7 +1093,16 @@ public function refundTicket($summit_id, $ticket_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', summary: 'Get ticket badge', description: 'Returns the badge associated with a ticket', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationOrders, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1069,7 +1145,16 @@ public function getAttendeeBadge($summit_id, $ticket_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', summary: 'Create ticket badge', description: 'Creates a badge for a specific ticket', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::UpdateRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1113,7 +1198,16 @@ public function createAttendeeBadge($summit_id, $ticket_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', summary: 'Delete ticket badge', description: 'Deletes the badge associated with a ticket', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::UpdateRegistrationOrders, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1139,7 +1233,16 @@ public function deleteAttendeeBadge($summit_id, $ticket_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/type/{type_id}', summary: 'Update badge type', description: 'Updates the badge type for a ticket', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::UpdateRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1175,7 +1278,16 @@ public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', summary: 'Add badge feature', description: 'Adds a feature to a ticket badge', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::UpdateRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1211,7 +1323,16 @@ public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', summary: 'Remove badge feature', description: 'Removes a feature from a ticket badge', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::UpdateRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1247,7 +1368,17 @@ public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/print', summary: 'Print badge with default view', description: 'Prints a badge using the summit\'s default view type', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::PrintRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + IGroup::BadgePrinters, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1284,7 +1415,17 @@ public function printAttendeeBadgeDefault($summit_id, $ticket_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/print', summary: 'Print badge with specific view type', description: 'Prints a badge using a specific view type', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::PrintRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + IGroup::BadgePrinters, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1339,7 +1480,17 @@ public function printAttendeeBadge($summit_id, $ticket_id, $view_type) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/can-print', summary: 'Check if badge can be printed (default view)', description: 'Checks if a badge can be printed using the default view type', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::PrintRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + IGroup::BadgePrinters, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), @@ -1372,7 +1523,17 @@ public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/can-print', summary: 'Check if badge can be printed (specific view)', description: 'Checks if a badge can be printed using a specific view type', - security: [['bearer' => []]], + security: [['summit_tickets_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::PrintRegistrationOrdersBadges, + ]]], + x: ['required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + IGroup::BadgePrinters, + ]], tags: ['tickets'], parameters: [ new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), diff --git a/app/Swagger/Security/SummitTicketsAuthSchema.php b/app/Swagger/Security/SummitTicketsAuthSchema.php new file mode 100644 index 000000000..61364442a --- /dev/null +++ b/app/Swagger/Security/SummitTicketsAuthSchema.php @@ -0,0 +1,29 @@ + 'Read All Summit Data', + SummitScopes::ReadRegistrationOrders => 'Read Registration Orders', + SummitScopes::WriteSummitData => 'Write Summit Data', + SummitScopes::WriteRegistrationData => 'Write Registration Data', + SummitScopes::UpdateRegistrationOrders => 'Update Registration Orders', + SummitScopes::UpdateRegistrationOrdersBadges => 'Update Registration Orders Badges', + SummitScopes::PrintRegistrationOrdersBadges => 'Print Registration Orders Badges', + SummitScopes::ReadMyRegistrationOrders => 'Read My Registration Orders', + ], + ), + ], +)] +class SummitTicketsAuthSchema {} From b1fc936752f7f3c2668ec21a91d04e3ae919f06c Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 5 Dec 2025 19:40:29 +0000 Subject: [PATCH 3/5] chore: Add operationId --- .../OAuth2SummitTicketApiController.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php index 7dd5e9995..1fa9afeef 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php @@ -110,6 +110,7 @@ public function __construct #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets', + operationId: 'getAllTickets', summary: 'Get all tickets for a summit', description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', security: [['summit_tickets_oauth2' => [ @@ -299,6 +300,7 @@ function () { #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/external', + operationId: 'getExternalTickets', summary: 'Get external ticket data', description: 'Returns ticket data from external registration feed by owner email', security: [['summit_tickets_oauth2' => [ @@ -380,6 +382,7 @@ function () { #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/csv', + operationId: 'getAllTicketsCSV', summary: 'Get all tickets for a summit', description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', security: [['summit_tickets_oauth2' => [ @@ -653,6 +656,7 @@ function($data, $serializerParams) use($questions){ #[OA\Put( path: '/api/v1/summits/{summit_id}/tickets/ingest', + operationId: 'ingestExternalTicketData', summary: 'Ingest external ticket data', description: 'Triggers ingestion of ticket data from external registration feed', security: [['summit_tickets_oauth2' => [ @@ -703,6 +707,7 @@ public function ingestExternalTicketData($summit_id) #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/import-template', + operationId: 'getTicketImportTemplate', summary: 'Get ticket import template', description: 'Returns a CSV template for importing ticket data', security: [['summit_tickets_oauth2' => [ @@ -792,6 +797,7 @@ public function getImportTicketDataTemplate($summit_id) #[OA\Post( path: '/api/v1/summits/{summit_id}/tickets/import', + operationId: 'importTicketData', summary: 'Import ticket data from CSV', description: 'Imports ticket data from a CSV file', security: [['summit_tickets_oauth2' => [ @@ -853,6 +859,7 @@ public function importTicketData(LaravelRequest $request, $summit_id) #[OA\Get( path: '/api/v1/summits/all/tickets/me', + operationId: 'getAllMyTickets', summary: 'Get all my tickets across all summits', description: 'Returns all tickets owned by the current user across all summits', security: [['summit_tickets_oauth2' => [ @@ -882,6 +889,7 @@ public function getAllMyTickets() #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/me', + operationId: 'getMyTicketsBySummit', summary: 'Get my tickets for a summit', description: 'Returns all tickets owned by the current user for a specific summit', security: [['summit_tickets_oauth2' => [ @@ -1019,6 +1027,7 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity #[OA\Delete( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/refund', + operationId: 'refundTicket', summary: 'Refund a ticket', description: 'Processes a refund for a specific ticket', security: [['summit_tickets_oauth2' => [ @@ -1091,6 +1100,7 @@ public function refundTicket($summit_id, $ticket_id) #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + operationId: 'getTicketBadge', summary: 'Get ticket badge', description: 'Returns the badge associated with a ticket', security: [['summit_tickets_oauth2' => [ @@ -1143,6 +1153,7 @@ public function getAttendeeBadge($summit_id, $ticket_id) #[OA\Post( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + operationId: 'createTicketBadge', summary: 'Create ticket badge', description: 'Creates a badge for a specific ticket', security: [['summit_tickets_oauth2' => [ @@ -1196,6 +1207,7 @@ public function createAttendeeBadge($summit_id, $ticket_id) #[OA\Delete( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + operationId: 'deleteTicketBadge', summary: 'Delete ticket badge', description: 'Deletes the badge associated with a ticket', security: [['summit_tickets_oauth2' => [ @@ -1231,6 +1243,7 @@ public function deleteAttendeeBadge($summit_id, $ticket_id) #[OA\Put( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/type/{type_id}', + operationId: 'updateTicketBadgeType', summary: 'Update badge type', description: 'Updates the badge type for a ticket', security: [['summit_tickets_oauth2' => [ @@ -1276,6 +1289,7 @@ public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) #[OA\Put( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', + operationId: 'addTicketBadgeFeature', summary: 'Add badge feature', description: 'Adds a feature to a ticket badge', security: [['summit_tickets_oauth2' => [ @@ -1321,6 +1335,7 @@ public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) #[OA\Delete( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', + operationId: 'removeTicketBadgeFeature', summary: 'Remove badge feature', description: 'Removes a feature from a ticket badge', security: [['summit_tickets_oauth2' => [ @@ -1366,6 +1381,7 @@ public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) #[OA\Put( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/print', + operationId: 'printTicketBadge', summary: 'Print badge with default view', description: 'Prints a badge using the summit\'s default view type', security: [['summit_tickets_oauth2' => [ @@ -1413,6 +1429,7 @@ public function printAttendeeBadgeDefault($summit_id, $ticket_id) #[OA\Put( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/print', + operationId: 'printTicketBadgeByViewType', summary: 'Print badge with specific view type', description: 'Prints a badge using a specific view type', security: [['summit_tickets_oauth2' => [ @@ -1478,6 +1495,7 @@ public function printAttendeeBadge($summit_id, $ticket_id, $view_type) #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/can-print', + operationId: 'canPrintTicketBadge', summary: 'Check if badge can be printed (default view)', description: 'Checks if a badge can be printed using the default view type', security: [['summit_tickets_oauth2' => [ @@ -1521,6 +1539,7 @@ public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) #[OA\Get( path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/can-print', + operationId: 'canPrintTicketBadgeByViewType', summary: 'Check if badge can be printed (specific view)', description: 'Checks if a badge can be printed using a specific view type', security: [['summit_tickets_oauth2' => [ From f36dbe84f49fbcc010f0d5d6e1419668b0d78d61 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 5 Dec 2025 20:14:58 +0000 Subject: [PATCH 4/5] fix: Update path parameters in OAuth2SummitTicketApiController for consistency --- .../OAuth2SummitTicketApiController.php | 77 +++++++++---------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php index 1fa9afeef..7e6ff660d 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php @@ -109,7 +109,7 @@ public function __construct #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets', + path: '/api/v1/summits/{id}/tickets', operationId: 'getAllTickets', summary: 'Get all tickets for a summit', description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', @@ -126,7 +126,7 @@ public function __construct ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit 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, maximum: 100)), new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by number, owner_name, owner_email, status, ticket_type_id, etc.', schema: new OA\Schema(type: 'string')), @@ -299,7 +299,7 @@ function () { } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/external', + path: '/api/v1/summits/{id}/tickets/external', operationId: 'getExternalTickets', summary: 'Get external ticket data', description: 'Returns ticket data from external registration feed by owner email', @@ -312,7 +312,7 @@ function () { ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'filter', in: 'query', required: true, description: 'Filter by owner_email', schema: new OA\Schema(type: 'string')), ], responses: [ @@ -381,7 +381,7 @@ function () { } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/csv', + path: '/api/v1/summits/{id}/tickets/csv', operationId: 'getAllTicketsCSV', summary: 'Get all tickets for a summit', description: 'Returns a paginated list of tickets for the specified summit with filtering and sorting capabilities', @@ -397,7 +397,7 @@ function () { ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit 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, maximum: 100)), new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by number, owner_name, owner_email, status, ticket_type_id, etc.', schema: new OA\Schema(type: 'string')), @@ -654,8 +654,8 @@ function($data, $serializerParams) use($questions){ }); } - #[OA\Put( - path: '/api/v1/summits/{summit_id}/tickets/ingest', + #[OA\Post( + path: '/api/v1/summits/{id}/tickets/ingest', operationId: 'ingestExternalTicketData', summary: 'Ingest external ticket data', description: 'Triggers ingestion of ticket data from external registration feed', @@ -671,7 +671,7 @@ function($data, $serializerParams) use($questions){ ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), ], requestBody: new OA\RequestBody( required: false, @@ -706,7 +706,7 @@ public function ingestExternalTicketData($summit_id) } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/import-template', + path: '/api/v1/summits/{id}/tickets/csv/template', operationId: 'getTicketImportTemplate', summary: 'Get ticket import template', description: 'Returns a CSV template for importing ticket data', @@ -722,7 +722,7 @@ public function ingestExternalTicketData($summit_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), ], responses: [ new OA\Response( @@ -796,7 +796,7 @@ public function getImportTicketDataTemplate($summit_id) } #[OA\Post( - path: '/api/v1/summits/{summit_id}/tickets/import', + path: '/api/v1/summits/{id}/tickets/csv', operationId: 'importTicketData', summary: 'Import ticket data from CSV', description: 'Imports ticket data from a CSV file', @@ -812,7 +812,7 @@ public function getImportTicketDataTemplate($summit_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), ], requestBody: new OA\RequestBody( required: true, @@ -858,7 +858,7 @@ public function importTicketData(LaravelRequest $request, $summit_id) } #[OA\Get( - path: '/api/v1/summits/all/tickets/me', + path: '/api/v1/summits/all/orders/all/tickets/me', operationId: 'getAllMyTickets', summary: 'Get all my tickets across all summits', description: 'Returns all tickets owned by the current user across all summits', @@ -888,7 +888,7 @@ public function getAllMyTickets() } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/me', + path: '/api/v1/summits/{id}/orders/all/tickets/me', operationId: 'getMyTicketsBySummit', summary: 'Get my tickets for a summit', description: 'Returns all tickets owned by the current user for a specific summit', @@ -897,7 +897,7 @@ public function getAllMyTickets() ]]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit 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, maximum: 100)), new OA\Parameter(name: 'filter', in: 'query', required: false, description: 'Filter by number, order_number, status, etc.', schema: new OA\Schema(type: 'string')), @@ -906,7 +906,6 @@ public function getAllMyTickets() new OA\Parameter(name: 'number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'order_number', in: 'query', required: false, schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'order_owner_email', in: 'query', required: false, schema: new OA\Schema(type: 'string')), - new OA\Parameter(name: 'summit_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'order_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'order_owner_id', in: 'query', required: false, schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'has_order_owner', in: 'query', required: false, schema: new OA\Schema(type: 'boolean')), @@ -1026,7 +1025,7 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity } #[OA\Delete( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/refund', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/refund', operationId: 'refundTicket', summary: 'Refund a ticket', description: 'Processes a refund for a specific ticket', @@ -1042,7 +1041,7 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), ], requestBody: new OA\RequestBody( @@ -1099,7 +1098,7 @@ public function refundTicket($summit_id, $ticket_id) } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge', operationId: 'getTicketBadge', summary: 'Get ticket badge', description: 'Returns the badge associated with a ticket', @@ -1115,7 +1114,7 @@ public function refundTicket($summit_id, $ticket_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID or number', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'expand', in: 'query', required: false, description: 'Expand relationships', schema: new OA\Schema(type: 'string')), ], @@ -1152,7 +1151,7 @@ public function getAttendeeBadge($summit_id, $ticket_id) } #[OA\Post( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge', operationId: 'createTicketBadge', summary: 'Create ticket badge', description: 'Creates a badge for a specific ticket', @@ -1168,7 +1167,7 @@ public function getAttendeeBadge($summit_id, $ticket_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), ], requestBody: new OA\RequestBody( @@ -1206,7 +1205,7 @@ public function createAttendeeBadge($summit_id, $ticket_id) } #[OA\Delete( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current', operationId: 'deleteTicketBadge', summary: 'Delete ticket badge', description: 'Deletes the badge associated with a ticket', @@ -1222,7 +1221,7 @@ public function createAttendeeBadge($summit_id, $ticket_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), ], responses: [ @@ -1242,7 +1241,7 @@ public function deleteAttendeeBadge($summit_id, $ticket_id) } #[OA\Put( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/type/{type_id}', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/type/{type_id}', operationId: 'updateTicketBadgeType', summary: 'Update badge type', description: 'Updates the badge type for a ticket', @@ -1258,7 +1257,7 @@ public function deleteAttendeeBadge($summit_id, $ticket_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'type_id', in: 'path', required: true, description: 'Badge Type ID', schema: new OA\Schema(type: 'integer')), ], @@ -1288,7 +1287,7 @@ public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) } #[OA\Put( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/features/{feature_id}', operationId: 'addTicketBadgeFeature', summary: 'Add badge feature', description: 'Adds a feature to a ticket badge', @@ -1304,7 +1303,7 @@ public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'feature_id', in: 'path', required: true, description: 'Feature ID', schema: new OA\Schema(type: 'integer')), ], @@ -1334,7 +1333,7 @@ public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) } #[OA\Delete( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/features/{feature_id}', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/features/{feature_id}', operationId: 'removeTicketBadgeFeature', summary: 'Remove badge feature', description: 'Removes a feature from a ticket badge', @@ -1350,7 +1349,7 @@ public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'feature_id', in: 'path', required: true, description: 'Feature ID', schema: new OA\Schema(type: 'integer')), ], @@ -1380,7 +1379,7 @@ public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) } #[OA\Put( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/print', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/print', operationId: 'printTicketBadge', summary: 'Print badge with default view', description: 'Prints a badge using the summit\'s default view type', @@ -1397,7 +1396,7 @@ public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), ], requestBody: new OA\RequestBody( @@ -1428,7 +1427,7 @@ public function printAttendeeBadgeDefault($summit_id, $ticket_id) } #[OA\Put( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/print', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/{view_type}/print', operationId: 'printTicketBadgeByViewType', summary: 'Print badge with specific view type', description: 'Prints a badge using a specific view type', @@ -1445,7 +1444,7 @@ public function printAttendeeBadgeDefault($summit_id, $ticket_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'view_type', in: 'path', required: true, description: 'View type name', schema: new OA\Schema(type: 'string')), ], @@ -1494,7 +1493,7 @@ public function printAttendeeBadge($summit_id, $ticket_id, $view_type) } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/can-print', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/print', operationId: 'canPrintTicketBadge', summary: 'Check if badge can be printed (default view)', description: 'Checks if a badge can be printed using the default view type', @@ -1511,7 +1510,7 @@ public function printAttendeeBadge($summit_id, $ticket_id, $view_type) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), ], responses: [ @@ -1538,7 +1537,7 @@ public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) } #[OA\Get( - path: '/api/v1/summits/{summit_id}/tickets/{ticket_id}/badge/{view_type}/can-print', + path: '/api/v1/summits/{id}/tickets/{ticket_id}/badge/current/{view_type}/print', operationId: 'canPrintTicketBadgeByViewType', summary: 'Check if badge can be printed (specific view)', description: 'Checks if a badge can be printed using a specific view type', @@ -1555,7 +1554,7 @@ public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) ]], tags: ['tickets'], parameters: [ - new OA\Parameter(name: 'summit_id', in: 'path', required: true, description: 'Summit ID or slug', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), new OA\Parameter(name: 'view_type', in: 'path', required: true, description: 'View type name', schema: new OA\Schema(type: 'string')), ], From 01db7d50636a6240ec7f29cb8ed2e3049c25c136 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Mon, 8 Dec 2025 20:53:16 +0000 Subject: [PATCH 5/5] chore: change tag to title case --- .../OAuth2SummitTicketApiController.php | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php index 7e6ff660d..6bccdbc5c 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTicketApiController.php @@ -124,7 +124,7 @@ public function __construct IGroup::SummitRegistrationAdmins, IGroup::BadgePrinters, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit 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)), @@ -310,7 +310,7 @@ function () { x: ['required-groups' => [ IGroup::BadgePrinters, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'filter', in: 'query', required: true, description: 'Filter by owner_email', schema: new OA\Schema(type: 'string')), @@ -395,7 +395,7 @@ function () { IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit 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)), @@ -669,7 +669,7 @@ function($data, $serializerParams) use($questions){ IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), ], @@ -720,7 +720,7 @@ public function ingestExternalTicketData($summit_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), ], @@ -810,7 +810,7 @@ public function getImportTicketDataTemplate($summit_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), ], @@ -865,7 +865,7 @@ public function importTicketData(LaravelRequest $request, $summit_id) security: [['summit_tickets_oauth2' => [ SummitScopes::ReadMyRegistrationOrders, ]]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ 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)), @@ -895,7 +895,7 @@ public function getAllMyTickets() security: [['summit_tickets_oauth2' => [ SummitScopes::ReadMyRegistrationOrders, ]]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit 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)), @@ -1039,7 +1039,7 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1112,7 +1112,7 @@ public function refundTicket($summit_id, $ticket_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID or number', schema: new OA\Schema(type: 'string')), @@ -1165,7 +1165,7 @@ public function getAttendeeBadge($summit_id, $ticket_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1219,7 +1219,7 @@ public function createAttendeeBadge($summit_id, $ticket_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1255,7 +1255,7 @@ public function deleteAttendeeBadge($summit_id, $ticket_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1301,7 +1301,7 @@ public function updateAttendeeBadgeType($summit_id, $ticket_id, $type_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1347,7 +1347,7 @@ public function addAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) IGroup::SummitAdministrators, IGroup::SummitRegistrationAdmins, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1394,7 +1394,7 @@ public function removeAttendeeBadgeFeature($summit_id, $ticket_id, $feature_id) IGroup::SummitRegistrationAdmins, IGroup::BadgePrinters, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1442,7 +1442,7 @@ public function printAttendeeBadgeDefault($summit_id, $ticket_id) IGroup::SummitRegistrationAdmins, IGroup::BadgePrinters, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1508,7 +1508,7 @@ public function printAttendeeBadge($summit_id, $ticket_id, $view_type) IGroup::SummitRegistrationAdmins, IGroup::BadgePrinters, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')), @@ -1552,7 +1552,7 @@ public function canPrintAttendeeBadgeDefault($summit_id, $ticket_id) IGroup::SummitRegistrationAdmins, IGroup::BadgePrinters, ]], - tags: ['tickets'], + tags: ['Tickets'], parameters: [ new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'ticket_id', in: 'path', required: true, description: 'Ticket ID', schema: new OA\Schema(type: 'integer')),