Skip to content

Commit 4a2ccc8

Browse files
Feature | Extend Swagger Coverage for controller OAuth2SummitTrackChairsApiController (#460)
* feat: Add openapi documentation for OAuth2SummitTrackChairsApiController * chore: Add PR's requested changes * chore: remove incorrect required-group Signed-off-by: Matias Perrone <github@matiasperrone.com> * chore: remove incorrectly added methods Signed-off-by: Matias Perrone <github@matiasperrone.com> --------- Signed-off-by: Matias Perrone <github@matiasperrone.com> Co-authored-by: Matias Perrone <github@matiasperrone.com>
1 parent 9d7411e commit 4a2ccc8

7 files changed

Lines changed: 544 additions & 31 deletions

File tree

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

Lines changed: 342 additions & 21 deletions
Large diffs are not rendered by default.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use OpenApi\Attributes as OA;
6+
7+
8+
9+
#[OA\Schema(
10+
schema: 'AdminMember',
11+
allOf: [
12+
new OA\Schema(ref: '#/components/schemas/Member'),
13+
new OA\Schema(
14+
type: 'object',
15+
properties: [
16+
new OA\Property(property: 'email', type: 'string', format: 'email'),
17+
new OA\Property(property: 'second_email', type: 'string', format: 'email'),
18+
new OA\Property(property: 'third_email', type: 'string', format: 'email'),
19+
new OA\Property(property: 'user_external_id', type: 'integer'),
20+
new OA\Property(property: 'rsvp', type: 'array', items: new OA\Items(type: 'integer'), description: 'Array of RSVP IDs, full objects available when expand=rsvp'),
21+
new OA\Property(property: 'rsvp_invitations', type: 'array', items: new OA\Items(type: 'integer'), description: 'Array of RSVP Invitation IDs, full objects available when expand=rsvp_invitations'),
22+
]
23+
)
24+
]
25+
)]
26+
class AdminMemberSchema {}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use OpenApi\Attributes as OA;
6+
7+
8+
#[OA\Schema(
9+
schema: 'SummitAbstractLocation',
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),
14+
new OA\Property(property: 'last_edited', type: 'integer', example: 1),
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(type: 'integer'), description: 'Array of published event IDs'),
24+
]
25+
)]
26+
class SummitAbstractLocationSchema
27+
{
28+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use App\Security\SummitScopes;
6+
use OpenApi\Attributes as OA;
7+
8+
#[OA\SecurityScheme(
9+
type: 'oauth2',
10+
securityScheme: 'summit_track_chairs_oauth2',
11+
flows: [
12+
new OA\Flow(
13+
authorizationUrl: L5_SWAGGER_CONST_AUTH_URL,
14+
tokenUrl: L5_SWAGGER_CONST_TOKEN_URL,
15+
flow: 'authorizationCode',
16+
scopes: [
17+
SummitScopes::ReadSummitData => 'Read Summit Data',
18+
SummitScopes::ReadAllSummitData => 'Read All Summit Data',
19+
SummitScopes::WriteSummitData => 'Write Summit Data',
20+
],
21+
),
22+
],
23+
)
24+
]
25+
class TrackChairsAuthSchema{}

app/Swagger/SummitProposedScheduleSchemas.php

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@
1010
new OA\Property(property: "id", type: "integer", example: 1),
1111
new OA\Property(property: "created", type: "integer", description: "Unix timestamp", example: 1640995200),
1212
new OA\Property(property: "last_edited", type: "integer", description: "Unix timestamp", example: 1640995200),
13-
new OA\Property(property: "allowed_timeframes", type: "array", items: new OA\Items(type: "integer"), description: "Array SummitProposedScheduleAllowedDay IDs or full SummitProposedScheduleAllowedDay objects when expanded", nullable: true),
13+
new OA\Property(property: "allowed_timeframes", type: "array", items: new OA\Items(oneOf: [
14+
new OA\Schema(type: 'integer'),
15+
new OA\Schema(ref: '#/components/schemas/SummitProposedScheduleAllowedDay')
16+
]), description: "Array of allowed timeframe IDs or objects when expand=allowed_timeframes",),
1417
new OA\Property(property: "location_id", type: "integer", example: 10, description: "only when not expanded"),
15-
new OA\Property(property: "location", type: "integer", description: "ID of the SummitAbstractLocation, when not expanded, when ?expand=location, you get a SummitAbstractLocation schema object in a 'location' property"),
16-
new OA\Property(property: "track_id", type: "integer", example: 5, description: "only when not expanded"),
17-
new OA\Property(property: "track", type: "integer", description: "ID of the PresentationCategory, when not expanded, when ?expand=track, you get a PresentationCategory schema object in a 'track' property"),
18+
new OA\Property(property: "location", ref: '#/components/schemas/SummitAbstractLocation', description: "only when expand=location"),
19+
new OA\Property(property: "track_id", type: "integer", example: 5, description: "PresentationCategory ID, use expand=track for full object details"),
1820
],
1921
)]
20-
class SummitProposedScheduleAllowedLocation {}
22+
class SummitProposedScheduleAllowedLocationSchema {}
2123

2224
#[OA\Schema(
2325
schema: "SummitProposedScheduleAllowedLocationRequest",
@@ -26,7 +28,7 @@ class SummitProposedScheduleAllowedLocation {}
2628
new OA\Property(property: "location_id", type: "integer", example: 10)
2729
]
2830
)]
29-
class SummitProposedScheduleAllowedLocationRequest {}
31+
class SummitProposedScheduleAllowedLocationRequestSchema {}
3032

3133
#[OA\Schema(
3234
schema: "SummitProposedScheduleAllowedDay",
@@ -40,7 +42,7 @@ class SummitProposedScheduleAllowedLocationRequest {}
4042
new OA\Property(property: "closing_hour", type: "integer", description: "Closing hour in HHMM format (0-2359)", example: 1700)
4143
]
4244
)]
43-
class SummitProposedScheduleAllowedDay {}
45+
class SummitProposedScheduleAllowedDaySchema {}
4446

4547
#[OA\Schema(
4648
schema: "SummitProposedScheduleAllowedDayAddRequest",
@@ -51,7 +53,7 @@ class SummitProposedScheduleAllowedDay {}
5153
new OA\Property(property: "closing_hour", type: "integer", description: "Closing hour in HHMM format (0-2359)", example: 1700)
5254
]
5355
)]
54-
class SummitProposedScheduleAllowedDayAddRequest {}
56+
class SummitProposedScheduleAllowedDayAddRequestSchema {}
5557

5658
#[OA\Schema(
5759
schema: "SummitProposedScheduleAllowedDayUpdateRequest",
@@ -61,7 +63,7 @@ class SummitProposedScheduleAllowedDayAddRequest {}
6163
new OA\Property(property: "closing_hour", type: "integer", description: "Closing hour in HHMM format (0-2359)", example: 1700)
6264
]
6365
)]
64-
class SummitProposedScheduleAllowedDayUpdateRequest {}
66+
class SummitProposedScheduleAllowedDayUpdateRequestSchema {}
6567
#[OA\Schema(
6668
schema: "SummitProposedScheduleSummitEvent",
6769
properties: [
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use OpenApi\Attributes as OA;
6+
7+
#[OA\Schema(
8+
schema: 'SummitTrackChair',
9+
type: 'object',
10+
description: 'Public view of track chair (limited member info without email)',
11+
required: ['id', 'created', 'last_edited'],
12+
properties: [
13+
new OA\Property(property: 'id', type: 'integer'),
14+
new OA\Property(property: 'created', type: 'integer', description: 'Unix timestamp'),
15+
new OA\Property(property: 'last_edited', type: 'integer', description: 'Unix timestamp'),
16+
new OA\Property(
17+
property: 'categories',
18+
type: 'array',
19+
items: new OA\Items(type: 'integer'),
20+
description: "Array of PresentationCategory ID, Use expand=categories to get full objects"
21+
),
22+
new OA\Property(property: 'summit_id', type: 'integer', example: 10, description: 'Summit ID when not expanded'),
23+
new OA\Property(property: 'summit', ref: '#/components/schemas/Summit', description: 'Full Summit object when expanded (expand=summit)'),
24+
new OA\Property(property: 'member_id', type: 'integer', example: 123, description: 'Member ID when not expanded'),
25+
new OA\Property(property: 'member', ref: '#/components/schemas/Member', description: 'Full Member object (without email) when expanded (expand=member)'),
26+
]
27+
)]
28+
class SummitTrackChairSchema {}
29+
30+
#[OA\Schema(
31+
schema: 'AdminSummitTrackChair',
32+
type: 'object',
33+
description: 'Admin view of track chair (includes member email)',
34+
required: ['id', 'created', 'last_edited'],
35+
properties: [
36+
new OA\Property(property: 'id', type: 'integer'),
37+
new OA\Property(property: 'created', type: 'integer', description: 'Unix timestamp'),
38+
new OA\Property(property: 'last_edited', type: 'integer', description: 'Unix timestamp'),
39+
new OA\Property(
40+
property: 'categories',
41+
type: 'array',
42+
items: new OA\Items(type: 'integer'),
43+
description: "Array of PresentationCategory ID, Use expand=categories to get full objects"
44+
),
45+
new OA\Property(property: 'summit_id', type: 'integer', example: 10, description: 'Summit ID when not expanded'),
46+
new OA\Property(property: 'summit', ref: '#/components/schemas/Summit', description: 'Full Summit object when expanded (expand=summit)'),
47+
new OA\Property(property: 'member_id', type: 'integer', example: 123, description: 'Member ID when not expanded'),
48+
new OA\Property(property: 'member', ref: '#/components/schemas/AdminMember', description: 'Full Member object (WITH email) when expanded (expand=member)'),
49+
]
50+
)]
51+
class AdminSummitTrackChairSchema {}
52+
53+
#[OA\Schema(
54+
schema: 'PaginatedTrackChairsResponse',
55+
allOf: [
56+
new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'),
57+
new OA\Schema(
58+
type: 'object',
59+
properties: [
60+
new OA\Property(
61+
property: 'data',
62+
type: 'array',
63+
items: new OA\Items(
64+
oneOf: [
65+
new OA\Schema(ref: '#/components/schemas/SummitTrackChair'),
66+
new OA\Schema(ref: '#/components/schemas/AdminSummitTrackChair')
67+
]
68+
)
69+
)
70+
]
71+
)
72+
]
73+
)]
74+
class PaginatedTrackChairsResponseSchema {}
75+
76+
#[OA\Schema(
77+
schema: 'TrackChairAddRequest',
78+
type: 'object',
79+
required: ['member_id', 'categories'],
80+
properties: [
81+
new OA\Property(
82+
property: 'member_id',
83+
type: 'integer',
84+
description: 'Member ID to assign as track chair',
85+
example: 123
86+
),
87+
new OA\Property(
88+
property: 'categories',
89+
type: 'array',
90+
items: new OA\Items(type: 'integer', example: 1),
91+
description: 'Array of track/category IDs this chair will manage'
92+
),
93+
]
94+
)]
95+
class TrackChairAddRequestSchema {}
96+
97+
#[OA\Schema(
98+
schema: 'TrackChairUpdateRequest',
99+
type: 'object',
100+
required: ['categories'],
101+
properties: [
102+
new OA\Property(
103+
property: 'categories',
104+
type: 'array',
105+
items: new OA\Items(type: 'integer', example: 1),
106+
description: 'Array of track/category IDs this chair will manage'
107+
),
108+
]
109+
)]
110+
class TrackChairUpdateRequestSchema {}

app/Swagger/schemas.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use App\Security\SummitScopes;
1010
use models\summit\RSVP;
1111
use OpenApi\Attributes as OA;
12+
use function Laravel\Prompts\form;
1213

1314
#[OA\Schema(
1415
schema: 'Owner',
@@ -756,4 +757,4 @@ class PaymentGatewayProfileUpdateRequestSchema
756757
)]
757758
class PaginatedUserStoriesResponseSchema
758759
{
759-
}
760+
}

0 commit comments

Comments
 (0)