From bc09fb83d08b15be403f7277dbfdf445bf65dff1 Mon Sep 17 00:00:00 2001 From: smarcet Date: Thu, 2 Oct 2025 13:23:36 -0300 Subject: [PATCH 1/9] chore: add to table SummitAttendeeTicket fild summit id to improve performance chore: add needed IDX --- ...DoctrineSummitAttendeeTicketRepository.php | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php b/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php index 9629a92fd..769fb9d63 100644 --- a/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php +++ b/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php @@ -52,26 +52,26 @@ public function __construct(EntityManagerInterface $em, ClassMetadata $class) /** @var array}> */ private array $joinCatalog = [ - 'o' => ['e.order', 'join', []], - 's' => ['e.summit', 'join', []], - 'ord_m' => ['o.owner', 'leftJoin', ['o']], - 'a' => ['e.owner', 'leftJoin', []], - 'a_c' => ['a.company', 'leftJoin', ['a']], - 'm' => ['a.member', 'leftJoin', ['a']], - 'am' => ['a.manager', 'leftJoin', ['a']], - 'm2' => ['am.member', 'leftJoin', ['am']], - 'b' => ['e.badge', 'leftJoin', []], - 'bt' => ['b.type', 'leftJoin', ['b']], - 'al' => ['bt.access_levels', 'leftJoin', ['bt']], - 'bf' => ['b.features', 'leftJoin', ['b']], - 'bt_bf' => ['bt.badge_features', 'leftJoin', ['bt']], - 'prt' => ['b.prints', 'leftJoin', ['b']], - 'rr' => ['e.refund_requests', 'leftJoin', []], - 'ta' => ['e.applied_taxes', 'leftJoin', []], - 'tt' => ['e.ticket_type', 'join', []], - 'pc' => ['e.promo_code', 'leftJoin', []], - 'pct' => ['pc.tags', 'leftJoin', ['pc']], - 'avt' => ['bt.allowed_view_types', 'join', ['bt']], + 'o' => ['e.order', 'join', []], + 's' => ['e.summit', 'join', []], + 'ord_m' => ['o.owner', 'leftJoin', ['o']], + 'a' => ['e.owner', 'leftJoin', []], + 'a_c' => ['a.company', 'leftJoin', ['a']], + 'm' => ['a.member', 'leftJoin', ['a']], + 'am' => ['a.manager', 'leftJoin', ['a']], + 'm2' => ['am.member', 'leftJoin', ['am']], + 'b' => ['e.badge', 'leftJoin', []], + 'bt' => ['b.type', 'leftJoin', ['b']], + 'al' => ['bt.access_levels', 'leftJoin', ['bt']], + 'bf' => ['b.features', 'leftJoin', ['b']], + 'bt_bf' => ['bt.badge_features', 'leftJoin', ['bt']], + 'prt' => ['b.prints', 'leftJoin', ['b']], + 'rr' => ['e.refund_requests', 'leftJoin', []], + 'ta' => ['e.applied_taxes', 'leftJoin', []], + 'tt' => ['e.ticket_type', 'join', []], + 'pc' => ['e.promo_code', 'leftJoin', []], + 'pct' => ['pc.tags', 'leftJoin', ['pc']], + 'avt' => ['bt.allowed_view_types', 'join', ['bt']], ]; private function ensureJoin(QueryBuilder $qb, string $alias): void From 5ddb081b7227323a37d4020c4f459563467dca8b Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 7 Oct 2025 15:17:04 -0300 Subject: [PATCH 2/9] feat: Extend Swagger Coverage for controller Apis/Protected/Summit/OAuth2SummitBadgesApiController.php --- .../OAuth2SummitBadgesApiController.php | 131 +++++++++++++++++- ...DoctrineSummitAttendeeTicketRepository.php | 40 +++--- 2 files changed, 150 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php index 55cac8eb6..3f383af2b 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php @@ -12,9 +12,11 @@ * limitations under the License. **/ use App\Models\Foundation\Summit\Repositories\ISummitAttendeeBadgeRepository; +use App\Security\SummitScopes; use models\oauth2\IResourceServerContext; use models\summit\ISummitRepository; use ModelSerializers\SerializerRegistry; +use OpenApi\Attributes as OA; use utils\Filter; use utils\FilterElement; @@ -52,6 +54,78 @@ protected function getSummitRepository(): ISummitRepository return $this->summit_repository; } + // OpenAPI Documentation + + #[OA\Get( + path: '/api/v1/summits/{id}/badges', + summary: 'Get all attendee badges for a summit', + description: 'Retrieves a paginated list of attendee badges for a specific summit. Badges are issued to attendees and contain ticket information, badge type, printing details, and feature assignments (ribbons, special access indicators, etc.).', + security: [['oauth2_security_scope' => [SummitScopes::ReadAllSummitData]]], + tags: ['Summit Badges'], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + description: 'Summit ID', + schema: new OA\Schema(type: 'integer') + ), + new OA\Parameter( + name: 'page', + in: 'query', + required: false, + description: 'Page number for pagination', + schema: new OA\Schema(type: 'integer', example: 1) + ), + new OA\Parameter( + name: 'per_page', + in: 'query', + required: false, + description: 'Items per page', + schema: new OA\Schema(type: 'integer', example: 10, maximum: 100) + ), + new OA\Parameter( + name: 'filter[]', + in: 'query', + required: false, + description: 'Filter expressions. Format: fieldvalue. Available fields: owner_first_name, owner_last_name, owner_full_name, owner_email, ticket_number, order_number (all support =@, ==). Operators: == (equals), =@ (contains)', + style: 'form', + explode: true, + schema: new OA\Schema( + type: 'array', + items: new OA\Items(type: 'string', example: 'owner_email==john@example.com') + ) + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + description: 'Order by field(s). Available fields: id, ticket_number, order_number, created. Use "-" prefix for descending order.', + schema: new OA\Schema(type: 'string', example: 'created') + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + description: 'Expand relationships. Available: ticket, type, features', + schema: new OA\Schema(type: 'string', example: 'ticket,type,features') + ), + ], + responses: [ + new OA\Response( + response: 200, + description: 'Attendee badges retrieved successfully', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeBadgesResponse') + ), + new OA\Response(response: 400, ref: '#/components/responses/400'), + new OA\Response(response: 401, ref: '#/components/responses/401'), + new OA\Response(response: 403, ref: '#/components/responses/403'), + new OA\Response(response: 404, ref: '#/components/responses/404'), + new OA\Response(response: 412, ref: '#/components/responses/412'), + new OA\Response(response: 500, ref: '#/components/responses/500'), + ] + )] + /** * @param $summit_id * @return mixed @@ -103,6 +177,61 @@ function(){ ); } + #[OA\Get( + path: '/api/v1/summits/{id}/badges/csv', + summary: 'Export all attendee badges for a summit to CSV', + description: 'Exports a CSV file containing all attendee badges for a specific summit. Supports the same filtering and ordering capabilities as the standard list endpoint.', + security: [['oauth2_security_scope' => [SummitScopes::ReadAllSummitData]]], + tags: ['Summit Badges'], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + description: 'Summit ID', + schema: new OA\Schema(type: 'integer') + ), + new OA\Parameter( + name: 'filter[]', + in: 'query', + required: false, + description: 'Filter expressions. Format: fieldvalue. Available fields: owner_first_name, owner_last_name, owner_full_name, owner_email, ticket_number, order_number (all support =@, ==)', + style: 'form', + explode: true, + schema: new OA\Schema( + type: 'array', + items: new OA\Items(type: 'string', example: 'owner_email=@example.com') + ) + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + description: 'Order by field(s). Available fields: id, ticket_number, order_number, created', + schema: new OA\Schema(type: 'string', example: '-created') + ), + ], + responses: [ + new OA\Response( + response: 200, + description: 'CSV file generated successfully', + content: new OA\MediaType( + mediaType: 'text/csv', + schema: new OA\Schema( + type: 'string', + format: 'binary' + ) + ) + ), + new OA\Response(response: 400, ref: '#/components/responses/400'), + new OA\Response(response: 401, ref: '#/components/responses/401'), + new OA\Response(response: 403, ref: '#/components/responses/403'), + new OA\Response(response: 404, ref: '#/components/responses/404'), + new OA\Response(response: 412, ref: '#/components/responses/412'), + new OA\Response(response: 500, ref: '#/components/responses/500'), + ] + )] + /** * @param $summit_id * @return mixed @@ -163,4 +292,4 @@ function(){ -} \ No newline at end of file +} diff --git a/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php b/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php index 769fb9d63..9629a92fd 100644 --- a/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php +++ b/app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php @@ -52,26 +52,26 @@ public function __construct(EntityManagerInterface $em, ClassMetadata $class) /** @var array}> */ private array $joinCatalog = [ - 'o' => ['e.order', 'join', []], - 's' => ['e.summit', 'join', []], - 'ord_m' => ['o.owner', 'leftJoin', ['o']], - 'a' => ['e.owner', 'leftJoin', []], - 'a_c' => ['a.company', 'leftJoin', ['a']], - 'm' => ['a.member', 'leftJoin', ['a']], - 'am' => ['a.manager', 'leftJoin', ['a']], - 'm2' => ['am.member', 'leftJoin', ['am']], - 'b' => ['e.badge', 'leftJoin', []], - 'bt' => ['b.type', 'leftJoin', ['b']], - 'al' => ['bt.access_levels', 'leftJoin', ['bt']], - 'bf' => ['b.features', 'leftJoin', ['b']], - 'bt_bf' => ['bt.badge_features', 'leftJoin', ['bt']], - 'prt' => ['b.prints', 'leftJoin', ['b']], - 'rr' => ['e.refund_requests', 'leftJoin', []], - 'ta' => ['e.applied_taxes', 'leftJoin', []], - 'tt' => ['e.ticket_type', 'join', []], - 'pc' => ['e.promo_code', 'leftJoin', []], - 'pct' => ['pc.tags', 'leftJoin', ['pc']], - 'avt' => ['bt.allowed_view_types', 'join', ['bt']], + 'o' => ['e.order', 'join', []], + 's' => ['e.summit', 'join', []], + 'ord_m' => ['o.owner', 'leftJoin', ['o']], + 'a' => ['e.owner', 'leftJoin', []], + 'a_c' => ['a.company', 'leftJoin', ['a']], + 'm' => ['a.member', 'leftJoin', ['a']], + 'am' => ['a.manager', 'leftJoin', ['a']], + 'm2' => ['am.member', 'leftJoin', ['am']], + 'b' => ['e.badge', 'leftJoin', []], + 'bt' => ['b.type', 'leftJoin', ['b']], + 'al' => ['bt.access_levels', 'leftJoin', ['bt']], + 'bf' => ['b.features', 'leftJoin', ['b']], + 'bt_bf' => ['bt.badge_features', 'leftJoin', ['bt']], + 'prt' => ['b.prints', 'leftJoin', ['b']], + 'rr' => ['e.refund_requests', 'leftJoin', []], + 'ta' => ['e.applied_taxes', 'leftJoin', []], + 'tt' => ['e.ticket_type', 'join', []], + 'pc' => ['e.promo_code', 'leftJoin', []], + 'pct' => ['pc.tags', 'leftJoin', ['pc']], + 'avt' => ['bt.allowed_view_types', 'join', ['bt']], ]; private function ensureJoin(QueryBuilder $qb, string $alias): void From c14426ae13f59f62e0fa8efc528593f08fb5c199 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 7 Oct 2025 15:21:06 -0300 Subject: [PATCH 3/9] chore: Move schemas to the new app/Swagger/SummitSchemas.php file --- app/Swagger/SummitSchemas.php | 101 +++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/app/Swagger/SummitSchemas.php b/app/Swagger/SummitSchemas.php index 6b3e2f895..89243dc28 100644 --- a/app/Swagger/SummitSchemas.php +++ b/app/Swagger/SummitSchemas.php @@ -4,4 +4,103 @@ use OpenApi\Attributes as OA; -// + +// Summit Badge Feature Types + +#[OA\Schema( + schema: 'SummitBadgeFeatureType', + type: 'object', + properties: [ + new OA\Property(property: 'id', type: 'integer', example: 1), + new OA\Property(property: 'name', type: 'string', example: 'Speaker Ribbon'), + new OA\Property(property: 'description', type: 'string', nullable: true, example: 'Special ribbon indicating speaker status'), + new OA\Property(property: 'template_content', type: 'string', nullable: true, example: '
{{name}}
'), + new OA\Property(property: 'summit_id', type: 'integer', example: 42), + new OA\Property(property: 'image', type: 'string', nullable: true, example: 'https://example.com/images/speaker-ribbon.png'), + ] +)] +class SummitBadgeFeatureTypeSchema {} + +#[OA\Schema( + schema: 'PaginatedSummitBadgeFeatureTypesResponse', + allOf: [ + new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'), + new OA\Schema( + type: 'object', + properties: [ + new OA\Property( + property: 'data', + type: 'array', + items: new OA\Items(ref: '#/components/schemas/SummitBadgeFeatureType') + ) + ] + ) + ] +)] +class PaginatedSummitBadgeFeatureTypesResponseSchema {} + +#[OA\Schema( + schema: 'SummitBadgeFeatureTypeCreateRequest', + type: 'object', + required: ['name'], + properties: [ + new OA\Property(property: 'name', type: 'string', example: 'Speaker Ribbon'), + new OA\Property(property: 'description', type: 'string', nullable: true, example: 'Special ribbon for speakers'), + new OA\Property(property: 'template_content', type: 'string', nullable: true, example: '
{{name}}
'), + ] +)] +class SummitBadgeFeatureTypeCreateRequestSchema {} + +#[OA\Schema( + schema: 'SummitBadgeFeatureTypeUpdateRequest', + type: 'object', + properties: [ + new OA\Property(property: 'name', type: 'string', example: 'VIP Ribbon'), + new OA\Property(property: 'description', type: 'string', nullable: true, example: 'VIP attendee designation'), + new OA\Property(property: 'template_content', type: 'string', nullable: true, example: '
{{name}}
'), + ] +)] +class SummitBadgeFeatureTypeUpdateRequestSchema {} + +// Summit Attendee Badges + +#[OA\Schema( + schema: 'SummitAttendeeBadge', + type: 'object', + properties: [ + new OA\Property(property: 'id', type: 'integer', example: 1), + new OA\Property(property: 'print_date', type: 'integer', nullable: true, example: 1633024800, description: 'Unix timestamp of when the badge was printed'), + new OA\Property(property: 'qr_code', type: 'string', nullable: true, example: 'QR123456789'), + new OA\Property(property: 'is_void', type: 'boolean', example: false, description: 'Whether the badge has been voided'), + new OA\Property(property: 'ticket_id', type: 'integer', example: 123, description: 'Associated ticket ID'), + new OA\Property(property: 'type_id', type: 'integer', example: 5, description: 'Badge type ID'), + new OA\Property(property: 'printed_times', type: 'integer', example: 2, description: 'Number of times this badge has been printed'), + new OA\Property(property: 'print_excerpt', type: 'string', example: 'John Doe - Speaker', description: 'Short text excerpt for printing'), + new OA\Property( + property: 'features', + type: 'array', + description: 'Array of feature IDs assigned to this badge (use expand=features for full details)', + items: new OA\Items(type: 'integer'), + example: [1, 2, 3] + ), + ] +)] +class SummitAttendeeBadgeSchema {} + +#[OA\Schema( + schema: 'PaginatedSummitAttendeeBadgesResponse', + allOf: [ + new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'), + new OA\Schema( + type: 'object', + properties: [ + new OA\Property( + property: 'data', + type: 'array', + items: new OA\Items(ref: '#/components/schemas/SummitAttendeeBadge') + ) + ] + ) + ] +)] +class PaginatedSummitAttendeeBadgesResponseSchema {} From 2918174517d2cccc3d289d0b0d86a4092987c6a7 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 7 Oct 2025 16:58:35 -0300 Subject: [PATCH 4/9] fix: error HTTP responses and remove reference --- .../OAuth2SummitBadgesApiController.php | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php index 3f383af2b..ddad9fe1d 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php @@ -117,12 +117,12 @@ protected function getSummitRepository(): ISummitRepository description: 'Attendee badges retrieved successfully', content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeBadgesResponse') ), - new OA\Response(response: 400, ref: '#/components/responses/400'), - new OA\Response(response: 401, ref: '#/components/responses/401'), - new OA\Response(response: 403, ref: '#/components/responses/403'), - new OA\Response(response: 404, ref: '#/components/responses/404'), - new OA\Response(response: 412, ref: '#/components/responses/412'), - new OA\Response(response: 500, ref: '#/components/responses/500'), + new OA\Response(response: 400, description: "Bad Request"), + new OA\Response(response: 401, description: "Unauthorized"), + new OA\Response(response: 403, description: "Forbidden"), + new OA\Response(response: 404, description: "Not Found"), + new OA\Response(response: 412, description: "Precondition Failed"), + new OA\Response(response: 500, description: "Internal Server Error"), ] )] @@ -223,12 +223,12 @@ function(){ ) ) ), - new OA\Response(response: 400, ref: '#/components/responses/400'), - new OA\Response(response: 401, ref: '#/components/responses/401'), - new OA\Response(response: 403, ref: '#/components/responses/403'), - new OA\Response(response: 404, ref: '#/components/responses/404'), - new OA\Response(response: 412, ref: '#/components/responses/412'), - new OA\Response(response: 500, ref: '#/components/responses/500'), + new OA\Response(response: 400, description: "Bad Request"), + new OA\Response(response: 401, description: "Unauthorized"), + new OA\Response(response: 403, description: "Forbidden"), + new OA\Response(response: 404, description: "Not Found"), + new OA\Response(response: 412, description: "Precondition Failed"), + new OA\Response(response: 500, description: "Internal Server Error"), ] )] From 877361df3d75c4162179f7359f9fc195241105cd Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 7 Oct 2025 16:59:22 -0300 Subject: [PATCH 5/9] fix: Remove unnecessary schemas and double require --- app/Swagger/SummitSchemas.php | 67 ++++------------------------------- 1 file changed, 7 insertions(+), 60 deletions(-) diff --git a/app/Swagger/SummitSchemas.php b/app/Swagger/SummitSchemas.php index 89243dc28..50d89a5f8 100644 --- a/app/Swagger/SummitSchemas.php +++ b/app/Swagger/SummitSchemas.php @@ -4,64 +4,6 @@ use OpenApi\Attributes as OA; - -// Summit Badge Feature Types - -#[OA\Schema( - schema: 'SummitBadgeFeatureType', - type: 'object', - properties: [ - new OA\Property(property: 'id', type: 'integer', example: 1), - new OA\Property(property: 'name', type: 'string', example: 'Speaker Ribbon'), - new OA\Property(property: 'description', type: 'string', nullable: true, example: 'Special ribbon indicating speaker status'), - new OA\Property(property: 'template_content', type: 'string', nullable: true, example: '
{{name}}
'), - new OA\Property(property: 'summit_id', type: 'integer', example: 42), - new OA\Property(property: 'image', type: 'string', nullable: true, example: 'https://example.com/images/speaker-ribbon.png'), - ] -)] -class SummitBadgeFeatureTypeSchema {} - -#[OA\Schema( - schema: 'PaginatedSummitBadgeFeatureTypesResponse', - allOf: [ - new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'), - new OA\Schema( - type: 'object', - properties: [ - new OA\Property( - property: 'data', - type: 'array', - items: new OA\Items(ref: '#/components/schemas/SummitBadgeFeatureType') - ) - ] - ) - ] -)] -class PaginatedSummitBadgeFeatureTypesResponseSchema {} - -#[OA\Schema( - schema: 'SummitBadgeFeatureTypeCreateRequest', - type: 'object', - required: ['name'], - properties: [ - new OA\Property(property: 'name', type: 'string', example: 'Speaker Ribbon'), - new OA\Property(property: 'description', type: 'string', nullable: true, example: 'Special ribbon for speakers'), - new OA\Property(property: 'template_content', type: 'string', nullable: true, example: '
{{name}}
'), - ] -)] -class SummitBadgeFeatureTypeCreateRequestSchema {} - -#[OA\Schema( - schema: 'SummitBadgeFeatureTypeUpdateRequest', - type: 'object', - properties: [ - new OA\Property(property: 'name', type: 'string', example: 'VIP Ribbon'), - new OA\Property(property: 'description', type: 'string', nullable: true, example: 'VIP attendee designation'), - new OA\Property(property: 'template_content', type: 'string', nullable: true, example: '
{{name}}
'), - ] -)] -class SummitBadgeFeatureTypeUpdateRequestSchema {} - // Summit Attendee Badges #[OA\Schema( @@ -72,9 +14,13 @@ class SummitBadgeFeatureTypeUpdateRequestSchema {} new OA\Property(property: 'print_date', type: 'integer', nullable: true, example: 1633024800, description: 'Unix timestamp of when the badge was printed'), new OA\Property(property: 'qr_code', type: 'string', nullable: true, example: 'QR123456789'), new OA\Property(property: 'is_void', type: 'boolean', example: false, description: 'Whether the badge has been voided'), + new OA\Property(property: 'printed_times', type: 'integer', example: 2, description: 'Number of times this badge has been printed'), + ], + anyOf: [ new OA\Property(property: 'ticket_id', type: 'integer', example: 123, description: 'Associated ticket ID'), + new OA\Property(property: 'ticket', type: 'Ticket'), new OA\Property(property: 'type_id', type: 'integer', example: 5, description: 'Badge type ID'), - new OA\Property(property: 'printed_times', type: 'integer', example: 2, description: 'Number of times this badge has been printed'), + new OA\Property(property: 'type', type: 'BadgeType'), new OA\Property(property: 'print_excerpt', type: 'string', example: 'John Doe - Speaker', description: 'Short text excerpt for printing'), new OA\Property( property: 'features', @@ -83,7 +29,7 @@ class SummitBadgeFeatureTypeUpdateRequestSchema {} items: new OA\Items(type: 'integer'), example: [1, 2, 3] ), - ] + ], )] class SummitAttendeeBadgeSchema {} @@ -104,3 +50,4 @@ class SummitAttendeeBadgeSchema {} ] )] class PaginatedSummitAttendeeBadgesResponseSchema {} + From eb2a63857c6e2765ff89fd9825a5e90741cfa6fa Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Wed, 8 Oct 2025 19:15:11 -0300 Subject: [PATCH 6/9] fix: incorrect types and descriptions for errors --- .../OAuth2SummitBadgesApiController.php | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php index ddad9fe1d..071accd1e 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php @@ -17,6 +17,7 @@ use models\summit\ISummitRepository; use ModelSerializers\SerializerRegistry; use OpenApi\Attributes as OA; +use Symfony\Component\HttpFoundation\Response; use utils\Filter; use utils\FilterElement; @@ -117,12 +118,12 @@ protected function getSummitRepository(): ISummitRepository description: 'Attendee badges retrieved successfully', content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitAttendeeBadgesResponse') ), - new OA\Response(response: 400, description: "Bad Request"), - new OA\Response(response: 401, description: "Unauthorized"), - new OA\Response(response: 403, description: "Forbidden"), - new OA\Response(response: 404, description: "Not Found"), - new OA\Response(response: 412, description: "Precondition Failed"), - new OA\Response(response: 500, description: "Internal Server Error"), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] @@ -223,12 +224,12 @@ function(){ ) ) ), - new OA\Response(response: 400, description: "Bad Request"), - new OA\Response(response: 401, description: "Unauthorized"), - new OA\Response(response: 403, description: "Forbidden"), - new OA\Response(response: 404, description: "Not Found"), - new OA\Response(response: 412, description: "Precondition Failed"), - new OA\Response(response: 500, description: "Internal Server Error"), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ] )] From ee2b545b26d773eb991ddc7bc5c99bebb10395b2 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 14 Oct 2025 14:26:30 -0300 Subject: [PATCH 7/9] fix: Change "namespace" word positioning --- .../Protected/Summit/OAuth2SummitBadgesApiController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php index 071accd1e..ec4063ced 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php @@ -1,4 +1,7 @@ - Date: Fri, 31 Oct 2025 15:41:06 -0300 Subject: [PATCH 8/9] fix: add the right security schema --- .../Apis/Protected/Summit/OAuth2SummitBadgesApiController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php index ec4063ced..466b5af0a 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php @@ -64,7 +64,7 @@ protected function getSummitRepository(): ISummitRepository path: '/api/v1/summits/{id}/badges', summary: 'Get all attendee badges for a summit', description: 'Retrieves a paginated list of attendee badges for a specific summit. Badges are issued to attendees and contain ticket information, badge type, printing details, and feature assignments (ribbons, special access indicators, etc.).', - security: [['oauth2_security_scope' => [SummitScopes::ReadAllSummitData]]], + security: [['Bearer' => [SummitScopes::ReadAllSummitData]]], tags: ['Summit Badges'], parameters: [ new OA\Parameter( From 9728e29e78cc9c7d715b3e4347a2bed45aac3e63 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Fri, 31 Oct 2025 15:43:25 -0300 Subject: [PATCH 9/9] fix: minort text Title case --- .../Apis/Protected/Summit/OAuth2SummitBadgesApiController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php index 466b5af0a..fc549c17c 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitBadgesApiController.php @@ -124,7 +124,7 @@ protected function getSummitRepository(): ISummitRepository new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), - new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), ]