Skip to content

Commit 1db1107

Browse files
Feature | Extend Swagger Coverage for controller OAuth2SummitApiController (#441)
* feat: Extend Swagger Coverage for controller OAuth2SummitApiController * chore: add missing field and endpoints * feat: Add OpenAPI documentation for OAuth2 security scheme * fix: issue on doc gen * chore: fix linting * feat: Enrich Summit schema and add missing simple schemas * fix: security schema names and missing info section * fix: missing and errored endpoints * fix: endpoints and add missing security summit scope * chore: add summit external orders scope * fix: merge issues * chore: Fix issues from the checklist Signed-off-by: Matias Perrone <github@matiasperrone.com> * fix: restored removed line Signed-off-by: Matias Perrone <github@matiasperrone.com> * chore: change invalid types and restore comments and linting Signed-off-by: Matias Perrone <github@matiasperrone.com> * fix: merger conflicts resolved --------- Signed-off-by: Matias Perrone <github@matiasperrone.com> Co-authored-by: Matias Perrone <github@matiasperrone.com>
1 parent b5c74e3 commit 1db1107

File tree

11 files changed

+1743
-349
lines changed

11 files changed

+1743
-349
lines changed

app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitApiController.php

Lines changed: 1478 additions & 26 deletions
Large diffs are not rendered by default.

app/Security/SummitScopes.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,7 @@ final class SummitScopes
121121
const WriteAttendeeNotesData = '%s/attendee/notes/write';
122122
const ReadAttendeeNotesData = '%s/attendee/notes/read';
123123

124+
const WriteSummitsConfirmExternalOrders = '%s/summits/confirm-external-orders';
125+
const ReadSummitsConfirmExternalOrders = '%s/summits/read-external-orders';
124126
}
127+
Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,28 @@
11
<?php
22

3-
namespace App\Swagger\Models;
3+
namespace App\Swagger\schemas;
44

55
use OpenApi\Attributes as OA;
66

7-
/**
8-
* Schema for SummitAbstractLocation model
9-
* Base schema for all location types
10-
*/
7+
118
#[OA\Schema(
129
schema: 'SummitAbstractLocation',
1310
type: 'object',
14-
description: 'Base location object for summits',
1511
properties: [
16-
new OA\Property(property: 'id', type: 'integer', description: 'Unique identifier'),
17-
new OA\Property(property: 'created', type: 'integer', description: 'Creation timestamp (epoch)'),
18-
new OA\Property(property: 'last_edited', type: 'integer', description: 'Last modification timestamp (epoch)'),
19-
new OA\Property(property: 'name', type: 'string', description: 'Location name'),
20-
new OA\Property(property: 'short_name', type: 'string', description: 'Short name for the location'),
21-
new OA\Property(property: 'description', type: 'string', description: 'Location description'),
22-
new OA\Property(property: 'location_type', type: 'string', description: 'Type of location'),
23-
new OA\Property(property: 'order', type: 'integer', description: 'Display order'),
24-
new OA\Property(property: 'opening_hour', type: 'integer', description: 'Opening hour (0-23)'),
25-
new OA\Property(property: 'closing_hour', type: 'integer', description: 'Closing hour (0-23)'),
26-
new OA\Property(property: 'class_name', type: 'string', description: 'Class name identifier'),
27-
new OA\Property(
28-
property: 'published_events',
29-
type: 'array',
30-
items: new OA\Items(type: 'integer'),
31-
description: 'Array of published event IDs at this location'
32-
),
33-
]
34-
)]
35-
class SummitAbstractLocationSchema {}
12+
new OA\Property(property: 'id', type: 'integer', example: 1),
13+
new OA\Property(property: 'created', type: 'integer', example: 1, format: 'int64', description: 'Unix timestamp'),
14+
new OA\Property(property: 'last_edited', type: 'integer', example: 1, format: 'int64', description: 'Unix timestamp'),
15+
new OA\Property(property: 'name', type: 'string'),
16+
new OA\Property(property: 'short_name', type: 'string'),
17+
new OA\Property(property: 'description', type: 'string'),
18+
new OA\Property(property: 'location_type', type: 'string'),
19+
new OA\Property(property: 'order', type: 'integer'),
20+
new OA\Property(property: 'opening_hour', type: 'integer'),
21+
new OA\Property(property: 'closing_hour', type: 'integer'),
22+
new OA\Property(property: 'class_name', type: 'string'),
23+
new OA\Property(property: 'published_events', type: 'array', items: new OA\Items(ref: "#/components/schemas/SummitEvent"), description: 'Array of SummitEvent ids, only if is in ?expand=published_events' ),
24+
])
25+
]
26+
class SummitAbstractLocationSchema
27+
{
28+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use OpenApi\Attributes as OA;
6+
7+
#[OA\Schema(
8+
schema: 'SummitEvent',
9+
type: 'object',
10+
properties: [
11+
new OA\Property(property: 'id', type: 'integer'),
12+
new OA\Property(property: 'created', type: 'integer', example: 1630500518),
13+
new OA\Property(property: 'last_edited', type: 'integer', example: 1630500518),
14+
new OA\Property(property: 'title', type: 'string', example: 'This is a title'),
15+
new OA\Property(property: 'description', type: 'string', example: 'This is a Description'),
16+
]
17+
)]
18+
class SummitEventSchema
19+
{
20+
}
21+

app/Swagger/Models/SummitSchema.php

Lines changed: 100 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,107 @@
1010
type: 'object',
1111
properties: [
1212
new OA\Property(property: 'id', type: 'integer', example: 1),
13-
new OA\Property(property: 'created', type: 'integer', example: 1),
14-
new OA\Property(property: 'last_edited', type: 'integer', example: 1),
15-
// @TODO: complete properties
13+
new OA\Property(property: 'created', type: 'integer', example: 1, format: 'int64', description: 'Unix timestamp'),
14+
new OA\Property(property: 'last_edited', type: 'integer', example: 1, format: 'int64', description: 'Unix timestamp'),
15+
16+
new OA\Property(property: 'name', type: 'string'),
17+
new OA\Property(property: 'start_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
18+
new OA\Property(property: 'end_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
19+
new OA\Property(property: 'registration_begin_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
20+
new OA\Property(property: 'registration_end_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
21+
new OA\Property(property: 'start_showing_venues_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
22+
new OA\Property(property: 'schedule_start_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
23+
new OA\Property(property: 'active', type: 'boolean'),
24+
new OA\Property(property: 'type_id', type: 'integer'),
25+
new OA\Property(property: 'dates_label', type: 'string'),
26+
new OA\Property(property: 'max_submission_allowed_per_user', type: 'integer'),
27+
new OA\Property(property: 'published_events_count', type: 'integer'),
28+
new OA\Property(property: 'time_zone_id', type: 'string'),
29+
new OA\Property(property: 'slug', type: 'string'),
30+
new OA\Property(property: 'invite_only_registration', type: 'boolean'),
31+
new OA\Property(property: 'meeting_room_booking_start_time', type: 'integer', format: 'int64', description: 'Unix timestamp'),
32+
new OA\Property(property: 'meeting_room_booking_end_time', type: 'integer', format: 'int64', description: 'Unix timestamp'),
33+
new OA\Property(property: 'meeting_room_booking_slot_length', type: 'integer'),
34+
new OA\Property(property: 'meeting_room_booking_max_allowed', type: 'integer'),
35+
new OA\Property(property: 'begin_allow_booking_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
36+
new OA\Property(property: 'end_allow_booking_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
37+
new OA\Property(property: 'logo', type: 'string', format: 'uri'),
38+
new OA\Property(property: 'secondary_logo', type: 'string', format: 'uri'),
39+
new OA\Property(property: 'reassign_ticket_till_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
40+
new OA\Property(property: 'registration_disclaimer_content', type: 'string'),
41+
new OA\Property(property: 'registration_disclaimer_mandatory', type: 'boolean'),
42+
new OA\Property(property: 'registration_reminder_email_days_interval', type: 'integer'),
43+
new OA\Property(property: 'registration_link', type: 'string', format: 'uri'),
44+
new OA\Property(property: 'secondary_registration_link', type: 'string', format: 'uri'),
45+
new OA\Property(property: 'secondary_registration_label', type: 'string'),
46+
new OA\Property(property: 'schedule_default_page_url', type: 'string', format: 'uri'),
47+
new OA\Property(property: 'schedule_default_event_detail_url', type: 'string', format: 'uri'),
48+
new OA\Property(property: 'schedule_og_site_name', type: 'string'),
49+
new OA\Property(property: 'schedule_og_image_url', type: 'string'),
50+
new OA\Property(property: 'schedule_og_image_secure_url', type: 'string'),
51+
new OA\Property(property: 'schedule_og_image_width', type: 'integer'),
52+
new OA\Property(property: 'schedule_og_image_height', type: 'integer'),
53+
new OA\Property(property: 'schedule_facebook_app_id', type: 'string'),
54+
new OA\Property(property: 'schedule_ios_app_name', type: 'string'),
55+
new OA\Property(property: 'schedule_ios_app_store_id', type: 'string'),
56+
new OA\Property(property: 'schedule_ios_app_custom_schema', type: 'string'),
57+
new OA\Property(property: 'schedule_android_app_name', type: 'string'),
58+
new OA\Property(property: 'schedule_android_app_package', type: 'string'),
59+
new OA\Property(property: 'schedule_android_custom_schema', type: 'string'),
60+
new OA\Property(property: 'schedule_twitter_app_name', type: 'string'),
61+
new OA\Property(property: 'schedule_twitter_text', type: 'string'),
62+
new OA\Property(property: 'default_page_url', type: 'string'),
63+
new OA\Property(property: 'speaker_confirmation_default_page_url', type: 'string'),
64+
new OA\Property(property: 'virtual_site_url', type: 'string'),
65+
new OA\Property(property: 'marketing_site_url', type: 'string'),
66+
new OA\Property(property: 'support_email', type: 'string'),
67+
new OA\Property(property: 'speakers_support_email', type: 'string'),
68+
new OA\Property(property: 'registration_send_qr_as_image_attachment_on_ticket_email', type: 'boolean'),
69+
new OA\Property(property: 'registration_send_ticket_as_pdf_attachment_on_ticket_email', type: 'boolean'),
70+
new OA\Property(property: 'registration_send_ticket_email_automatically', type: 'boolean'),
71+
new OA\Property(property: 'registration_send_order_email_automatically', type: 'boolean'),
72+
new OA\Property(property: 'registration_allow_automatic_reminder_emails', type: 'boolean'),
73+
new OA\Property(property: 'modality', type: 'string'),
74+
new OA\Property(property: 'allow_update_attendee_extra_questions', type: 'boolean'),
75+
new OA\Property(property: 'time_zone_label', type: 'string'),
76+
new OA\Property(property: 'registration_allowed_refund_request_till_date', type: 'integer', format: 'int64', description: 'Unix timestamp'),
77+
new OA\Property(property: 'registration_slug_prefix', type: 'string'),
78+
new OA\Property(property: 'marketing_site_oauth2_client_scopes', type: 'string'),
79+
new OA\Property(property: 'default_ticket_type_currency', type: 'string'),
80+
new OA\Property(property: 'default_ticket_type_currency_symbol', type: 'string'),
81+
// Relations as Ids
82+
new OA\Property(property: 'ticket_types', type: 'array', items: new OA\Items(type: "integer")),
83+
new OA\Property(property: 'wifi_connections', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=wifi_connections.'),
84+
new OA\Property(property: 'selection_plans', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=selection_plans.'),
85+
new OA\Property(property: 'meeting_booking_room_allowed_attributes', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=meeting_booking_room_allowed_attributes.'),
86+
new OA\Property(property: 'summit_sponsors', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=summit_sponsors.'),
87+
new OA\Property(property: 'order_extra_questions', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=order_extra_questions.'),
88+
new OA\Property(property: 'tax_types', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=tax_types.'),
89+
new OA\Property(property: 'payment_profiles', type: 'array', items: new OA\Items(type: "object"), description: 'Array of PaymentGatewayProfile, when included in ?relations=payment_profiles.'),
90+
new OA\Property(property: 'email_flows_events', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=email_flows_events.'),
91+
new OA\Property(property: 'summit_documents', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=summit_documents.'),
92+
new OA\Property(property: 'dates_with_events', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=dates_with_events.'),
93+
new OA\Property(property: 'presentation_action_types', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=presentation_action_types.'),
94+
new OA\Property(property: 'schedule_settings', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=schedule_settings.'),
95+
new OA\Property(property: 'badge_view_types', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=badge_view_types.'),
96+
new OA\Property(property: 'lead_report_settings', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=lead_report_settings.'),
97+
new OA\Property(property: 'badge_types', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=badge_types.'),
98+
new OA\Property(property: 'badge_features_types', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=badge_features_types.'),
99+
new OA\Property(property: 'badge_access_level_types', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=badge_access_level_types.'),
100+
new OA\Property(property: 'supported_currencies', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=supported_currencies.'),
101+
// Expanded relations
102+
new OA\Property(property: 'featured_speakers', type: 'array', items: new OA\Items(type: "integer"), description: 'Array of Ids, when included in ?relations=featured_speakers, full objects when included in ?expand=featured_speakers.'),
103+
new OA\Property(property: 'type', ref: '#/components/schemas/SummitType', description: 'SummitType, when included in ?relations=type, full object when included in ?expand=type.'),
104+
new OA\Property(property: 'locations', type: 'array', items: new OA\Items(ref: '#/components/schemas/SummitAbstractLocation'), description: 'Array of SummitAbstractLocation when included in ?expand=locations.'),
105+
new OA\Property(property: 'event_types', type: 'array', items: new OA\Items(type: "object"), description: 'Array of SummitEmailEventFlowType, when included in ?expand=schedule.'),
106+
new OA\Property(property: 'tracks', type: 'array', items: new OA\Items(type: "object"), description: 'Array of PresentationCategory, when included in ?expand=schedule.'),
107+
new OA\Property(property: 'track_groups', type: 'array', items: new OA\Items(type: "object"), description: 'Array of PresentationCategoryGroup, when included in ?expand=schedule.'),
108+
new OA\Property(property: 'schedule', type: 'array', items: new OA\Items(ref: '#/components/schemas/SummitEvent'), description: 'Array of SummitEvent, when included in ?expand=schedule.'),
109+
new OA\Property(property: 'sponsors', type: 'array', items: new OA\Items(ref: "#/components/schemas/Company"), description: 'Array of Company, when included in ?expand=schedule.'),
110+
new OA\Property(property: 'speakers', type: 'array', items: new OA\Items(type: "object"), description: 'Array of PresentationSpeaker, when included in ?expand=schedule.'),
111+
16112
])
17113
]
18114
class SummitSchema
19115
{
20-
}
116+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use OpenApi\Attributes as OA;
6+
7+
8+
#[OA\Schema(
9+
schema: 'SummitType',
10+
type: 'object',
11+
properties: [
12+
new OA\Property(property: 'id', type: 'integer', example: 1),
13+
new OA\Property(property: 'created', type: 'integer', example: 1, format: 'int64', description: 'Unix timestamp'),
14+
new OA\Property(property: 'last_edited', type: 'integer', example: 1, format: 'int64', description: 'Unix timestamp'),
15+
new OA\Property(property: 'name', type: 'string'),
16+
new OA\Property(property: 'color', type: 'string'),
17+
new OA\Property(property: 'type', type: 'string'),
18+
19+
])
20+
]
21+
class SummitTypeSchema
22+
{
23+
}

app/Swagger/Security/SummitAuthSchema.php

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,27 @@
66
use OpenApi\Attributes as OA;
77

88
#[
9+
OA\Info(version: "1.0.0", description: "Summit API", title: "Summit API Documentation"),
10+
OA\Server(url: L5_SWAGGER_CONST_HOST, description: "server"),
911
OA\SecurityScheme(
10-
type: 'oauth2',
11-
securityScheme: 'summit_document_oauth2',
12-
flows: [
13-
new OA\Flow(
14-
authorizationUrl: L5_SWAGGER_CONST_AUTH_URL,
15-
tokenUrl: L5_SWAGGER_CONST_TOKEN_URL,
16-
flow: 'authorizationCode',
17-
scopes: [
18-
SummitScopes::ReadAllSummitData => 'Read All Summit Data',
19-
SummitScopes::WriteSummitData => 'Write Summit Data',
20-
],
21-
),
22-
],
23-
)
12+
type: 'oauth2',
13+
securityScheme: 'summit_oauth2',
14+
flows: [
15+
new OA\Flow(
16+
authorizationUrl: L5_SWAGGER_CONST_AUTH_URL,
17+
tokenUrl: L5_SWAGGER_CONST_TOKEN_URL,
18+
flow: 'authorizationCode',
19+
scopes: [
20+
SummitScopes::ReadSummitData => 'Read Summit Data',
21+
SummitScopes::ReadAllSummitData => 'Read All Summit Data',
22+
SummitScopes::WriteSummitData => 'Write Summit Data',
23+
SummitScopes::ReadBadgeScanValidate => 'Validate Badge Scan',
24+
],
25+
),
26+
],
27+
)
2428
]
25-
class SummitAuthSchema {}
29+
30+
class SummitAuthSchema
31+
{
32+
}

0 commit comments

Comments
 (0)