Skip to content

Commit 80c39c4

Browse files
feat: Add openapi documentation for OAuth2SponsorshipTypeApiController
1 parent a531804 commit 80c39c4

2 files changed

Lines changed: 280 additions & 15 deletions

File tree

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

Lines changed: 214 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,35 @@
1313
**/
1414
use App\Models\Foundation\Summit\Repositories\ISponsorshipTypeRepository;
1515
use App\ModelSerializers\SerializerUtils;
16+
use App\Security\SummitScopes;
1617
use App\Services\Model\ISponsorshipTypeService;
18+
use Illuminate\Support\Facades\Config;
1719
use Illuminate\Support\Facades\Log;
1820
use models\oauth2\IResourceServerContext;
1921
use models\summit\ISummitRepository;
2022
use ModelSerializers\SerializerRegistry;
23+
use App\Models\Foundation\Main\IGroup;
24+
use OpenApi\Attributes as OA;
25+
use Symfony\Component\HttpFoundation\Response;
26+
27+
#[
28+
OA\SecurityScheme(
29+
type: 'oauth2',
30+
securityScheme: 'summit_sponsorship_oauth2',
31+
flows: [
32+
new OA\Flow(
33+
authorizationUrl: L5_SWAGGER_CONST_AUTH_URL,
34+
tokenUrl: L5_SWAGGER_CONST_TOKEN_URL,
35+
flow: 'authorizationCode',
36+
scopes: [
37+
SummitScopes::ReadSummitData => 'Read Sponsorship Types Data',
38+
SummitScopes::WriteSummitData => 'Write Sponsorship Types Data',
39+
],
40+
),
41+
],
42+
)
43+
]
44+
class SponsorshipTypeAuthSchema {}
2145
/**
2246
* Class OAuth2SponsorshipTypeApiController
2347
* @package App\Http\Controllers
@@ -101,9 +125,108 @@ protected function getSummitRepository(): ISummitRepository
101125
}
102126

103127
use GetAndValidateJsonPayload;
104-
/**
105-
* @return \Illuminate\Http\JsonResponse|mixed
106-
*/
128+
129+
#[OA\Get(
130+
path: "/api/v1/sponsorship-types",
131+
summary: "Get all sponsorship types",
132+
operationId: 'getSponsorshipTypes',
133+
x: [
134+
'required-groups' => [
135+
IGroup::SummitAdministrators,
136+
IGroup::SuperAdmins,
137+
IGroup::Administrators
138+
]
139+
],
140+
security: [['summit_sponsorship_oauth2' => [
141+
SummitScopes::ReadSummitData,
142+
SummitScopes::ReadAllSummitData,
143+
]]],
144+
tags: ["SponsorshipTypes"],
145+
parameters: [
146+
new OA\Parameter(name: "page", description: "Page number", in: "query", required: false, schema: new OA\Schema(type: "integer", default: 1)),
147+
new OA\Parameter(name: "per_page", description: "Items per page", in: "query", required: false, schema: new OA\Schema(type: "integer", default: 10)),
148+
new OA\Parameter(name: "filter", description: "Filter query (name==value, label=@value, size==value)", in: "query", required: false, schema: new OA\Schema(type: "string")),
149+
new OA\Parameter(name: "order", description: "Order by (+id, -name, +order, +label, +size)", in: "query", required: false, schema: new OA\Schema(type: "string")),
150+
],
151+
responses: [
152+
new OA\Response(
153+
response: Response::HTTP_OK,
154+
description: "OK",
155+
content: new OA\JsonContent(ref: '#/components/schemas/PaginatedDataSponsorshipType'),
156+
),
157+
new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"),
158+
new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"),
159+
new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"),
160+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
161+
]
162+
)]
163+
public function getAll()
164+
{
165+
return $this->_getAll(
166+
function(){
167+
return [
168+
'name' => ['==', '=@'],
169+
'label' => ['==', '=@'],
170+
'size' => ['==', '=@'],
171+
];
172+
},
173+
function(){
174+
return [
175+
'name' => 'sometimes|required|string',
176+
'label' => 'sometimes|required|string',
177+
'size' => 'sometimes|required|string',
178+
];
179+
},
180+
function(){
181+
return [
182+
'id',
183+
'name',
184+
'order',
185+
'label',
186+
'size',
187+
];
188+
},
189+
function($filter){
190+
return $filter;
191+
},
192+
function(){
193+
return SerializerRegistry::SerializerType_Public;
194+
}
195+
);
196+
}
197+
198+
#[OA\Post(
199+
path: "/api/v1/sponsorship-types",
200+
summary: "Add a new sponsorship type",
201+
operationId: 'addSponsorshipType',
202+
x: [
203+
'required-groups' => [
204+
IGroup::SummitAdministrators,
205+
IGroup::SuperAdmins,
206+
IGroup::Administrators
207+
]
208+
],
209+
security: [['summit_sponsorship_oauth2' => [
210+
SummitScopes::WriteSummitData,
211+
]]],
212+
tags: ["SponsorshipTypes"],
213+
requestBody: new OA\RequestBody(
214+
required: true,
215+
content: new OA\JsonContent(ref: "#/components/schemas/SponsorshipTypeAddRequest")
216+
),
217+
responses: [
218+
new OA\Response(
219+
response: Response::HTTP_CREATED,
220+
description: "Created",
221+
content: new OA\JsonContent(ref: "#/components/schemas/SponsorshipType")
222+
),
223+
new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"),
224+
new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"),
225+
new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"),
226+
new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"),
227+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
228+
]
229+
)]
107230
public function add()
108231
{
109232
return $this->processRequest(function(){
@@ -124,10 +247,31 @@ public function add()
124247
});
125248
}
126249

127-
/**
128-
* @param $id
129-
* @return \Illuminate\Http\JsonResponse|mixed
130-
*/
250+
#[OA\Get(
251+
path: "/api/v1/sponsorship-types/{id}",
252+
summary: "Get a sponsorship type by id",
253+
operationId: 'getSponsorshipType',
254+
security: [['summit_sponsorship_oauth2' => [
255+
SummitScopes::ReadSummitData,
256+
SummitScopes::ReadAllSummitData,
257+
]]],
258+
tags: ["SponsorshipTypes"],
259+
parameters: [
260+
new OA\Parameter(name: "id", description: "Sponsorship Type ID", in: "path", required: true, schema: new OA\Schema(type: "integer")),
261+
],
262+
responses: [
263+
new OA\Response(
264+
response: Response::HTTP_OK,
265+
description: "OK",
266+
content: new OA\JsonContent(ref: "#/components/schemas/SponsorshipType")
267+
),
268+
new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"),
269+
new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"),
270+
new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"),
271+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
272+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
273+
]
274+
)]
131275
public function get($id)
132276
{
133277
return $this->processRequest(function() use($id){
@@ -144,10 +288,42 @@ public function get($id)
144288
});
145289
}
146290

147-
/**
148-
* @param $id
149-
* @return \Illuminate\Http\JsonResponse|mixed
150-
*/
291+
#[OA\Put(
292+
path: "/api/v1/sponsorship-types/{id}",
293+
summary: "Update a sponsorship type",
294+
operationId: 'updateSponsorshipType',
295+
x: [
296+
'required-groups' => [
297+
IGroup::SummitAdministrators,
298+
IGroup::SuperAdmins,
299+
IGroup::Administrators
300+
]
301+
],
302+
security: [['summit_sponsorship_oauth2' => [
303+
SummitScopes::WriteSummitData,
304+
]]],
305+
tags: ["SponsorshipTypes"],
306+
parameters: [
307+
new OA\Parameter(name: "id", description: "Sponsorship Type ID", in: "path", required: true, schema: new OA\Schema(type: "integer")),
308+
],
309+
requestBody: new OA\RequestBody(
310+
required: true,
311+
content: new OA\JsonContent(ref: "#/components/schemas/SponsorshipTypeUpdateRequest")
312+
),
313+
responses: [
314+
new OA\Response(
315+
response: Response::HTTP_OK,
316+
description: "OK",
317+
content: new OA\JsonContent(ref: "#/components/schemas/SponsorshipType")
318+
),
319+
new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"),
320+
new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"),
321+
new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"),
322+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
323+
new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"),
324+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
325+
]
326+
)]
151327
public function update($id)
152328
{
153329
return $this->processRequest(function() use($id){
@@ -168,10 +344,33 @@ public function update($id)
168344
});
169345
}
170346

171-
/**
172-
* @param $id
173-
* @return \Illuminate\Http\JsonResponse|mixed
174-
*/
347+
#[OA\Delete(
348+
path: "/api/v1/sponsorship-types/{id}",
349+
summary: "Delete a sponsorship type",
350+
operationId: 'deleteSponsorshipType',
351+
x: [
352+
'required-groups' => [
353+
IGroup::SummitAdministrators,
354+
IGroup::SuperAdmins,
355+
IGroup::Administrators
356+
]
357+
],
358+
security: [['summit_sponsorship_oauth2' => [
359+
SummitScopes::WriteSummitData,
360+
]]],
361+
tags: ["SponsorshipTypes"],
362+
parameters: [
363+
new OA\Parameter(name: "id", description: "Sponsorship Type ID", in: "path", required: true, schema: new OA\Schema(type: "integer")),
364+
],
365+
responses: [
366+
new OA\Response(response: Response::HTTP_NO_CONTENT, description: "No Content"),
367+
new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"),
368+
new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"),
369+
new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"),
370+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
371+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
372+
]
373+
)]
175374
public function delete($id)
176375
{
177376
return $this->processRequest(function() use($id){
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
namespace App\Swagger\schemas;
4+
5+
use App\Security\SummitScopes;
6+
use OpenApi\Attributes as OA;
7+
use Symfony\Component\HttpFoundation\Response;
8+
9+
#[OA\Schema(
10+
schema: 'PaginatedDataSponsorshipType',
11+
allOf: [
12+
new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'),
13+
new OA\Schema(
14+
type: 'object',
15+
properties: [
16+
new OA\Property(
17+
property: 'data',
18+
type: 'array',
19+
items: new OA\Items(ref: '#/components/schemas/SponsorshipType')
20+
)
21+
]
22+
)
23+
]
24+
)]
25+
class PaginatedDataSponsorshipTypeSchemas {}
26+
27+
#[OA\Schema(
28+
schema: 'SponsorshipType',
29+
type: 'object',
30+
properties: [
31+
new OA\Property(property: 'id', type: 'integer'),
32+
new OA\Property(property: 'created', type: 'integer'),
33+
new OA\Property(property: 'last_edited', type: 'integer'),
34+
new OA\Property(property: 'name', type: 'string'),
35+
new OA\Property(property: 'label', type: 'string'),
36+
new OA\Property(property: 'order', type: 'integer'),
37+
new OA\Property(property: 'size', type: 'string', description: 'Sponsorship size category'),
38+
]
39+
)]
40+
class SponsorshipTypeSchemas {}
41+
42+
43+
44+
#[OA\Schema(
45+
schema: 'SponsorshipTypeAddRequest',
46+
type: 'object',
47+
required: ['name', 'label', 'size'],
48+
properties: [
49+
new OA\Property(property: 'name', type: 'string'),
50+
new OA\Property(property: 'label', type: 'string'),
51+
new OA\Property(property: 'size', type: 'string', enum: ['Small', 'Medium', 'Large', 'Big']),
52+
]
53+
)]
54+
class SponsorshipTypeAddRequest {}
55+
56+
#[OA\Schema(
57+
schema: 'SponsorshipTypeUpdateRequest',
58+
type: 'object',
59+
properties: [
60+
new OA\Property(property: 'name', type: 'string'),
61+
new OA\Property(property: 'label', type: 'string'),
62+
new OA\Property(property: 'size', type: 'string', enum: ['Small', 'Medium', 'Large', 'Big']),
63+
new OA\Property(property: 'order', type: 'integer', minimum: 1),
64+
]
65+
)]
66+
class SponsorshipTypeUpdateRequest {}

0 commit comments

Comments
 (0)