1- <?php namespace App \Http \Controllers ;
1+ <?php
2+
3+ namespace App \Http \Controllers ;
4+
25/*
36 * Copyright 2022 OpenStack Foundation
47 * Licensed under the Apache License, Version 2.0 (the "License");
1215 * limitations under the License.
1316 **/
1417
18+ use App \Models \Foundation \Main \IGroup ;
1519use App \Models \Foundation \Summit \Repositories \ISummitSponsorshipTypeRepository ;
1620use App \ModelSerializers \SerializerUtils ;
21+ use App \Security \SummitScopes ;
1722use App \Services \Model \ISummitSponsorshipTypeService ;
1823use Illuminate \Http \Request as LaravelRequest ;
24+ use Illuminate \Http \Response ;
1925use models \oauth2 \IResourceServerContext ;
2026use models \summit \ISummitRepository ;
2127use models \summit \Summit ;
2228use models \utils \IEntity ;
2329use ModelSerializers \SerializerRegistry ;
30+ use OpenApi \Attributes as OA ;
2431
2532/**
2633 * Class OAuth2SummitSponsorshipTypeApiController
2734 * @package App\Http\Controllers
2835 */
29- final class OAuth2SummitSponsorshipTypeApiController
30- extends OAuth2ProtectedController
36+ final class OAuth2SummitSponsorshipTypeApiController extends OAuth2ProtectedController
3137{
3238 /**
3339 * @var ISummitRepository
@@ -51,8 +57,7 @@ public function __construct
5157 ISummitSponsorshipTypeRepository $ repository ,
5258 ISummitSponsorshipTypeService $ service ,
5359 IResourceServerContext $ resource_server_context
54- )
55- {
60+ ) {
5661 $ this ->service = $ service ;
5762 $ this ->repository = $ repository ;
5863 $ this ->summit_repository = $ summit_repository ;
@@ -69,6 +74,207 @@ public function __construct
6974
7075 use DeleteSummitChildElement;
7176
77+ #[OA \Get(
78+ path: '/api/v1/summits/{id}/sponsorships-types ' ,
79+ summary: 'Get all sponsorship types for a summit ' ,
80+ operationId: 'getSummitAllSponsorshipTypes ' ,
81+ x: [
82+ 'required-groups ' => [
83+ IGroup::SuperAdmins,
84+ IGroup::Administrators,
85+ IGroup::SummitAdministrators,
86+ ]
87+ ],
88+ security: [
89+ [
90+ 'sponsorship_types_oauth2 ' => [
91+ SummitScopes::ReadSummitData,
92+ SummitScopes::ReadAllSummitData,
93+ ]
94+ ]
95+ ],
96+ tags: ['Summits Sponsorship Types ' ],
97+ parameters: [
98+ new OA \Parameter (name: 'page ' , in: 'query ' , required: false , description: 'Page number ' , schema: new OA \Schema (type: 'integer ' , default: 1 )),
99+ new OA \Parameter (name: 'per_page ' , in: 'query ' , required: false , description: 'Items per page ' , schema: new OA \Schema (type: 'integer ' , default: 10 , maximum: 100 )),
100+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
101+ new OA \Parameter (name: 'filter ' , in: 'query ' , description: 'Filter by name, label, or size (name=@value, label==value, size=@value) ' , schema: new OA \Schema (type: 'string ' )),
102+ new OA \Parameter (name: 'order ' , in: 'query ' , description: 'Order by: +/-id, +/-name, +/-order, +/-label, +/-size ' , schema: new OA \Schema (type: 'string ' )),
103+ new OA \Parameter (name: 'expand ' , in: 'query ' , required: false , description: 'Expand related entities ' , schema: new OA \Schema (type: 'string ' )),
104+ new OA \Parameter (name: 'fields ' , in: 'query ' , required: false , description: 'Fields to return (comma-separated) ' , schema: new OA \Schema (type: 'string ' )),
105+ new OA \Parameter (name: 'relations ' , in: 'query ' , required: false , description: 'Related entities to include (comma-separated) ' , schema: new OA \Schema (type: 'string ' )),
106+ ],
107+ responses: [
108+ new OA \Response (
109+ response: Response::HTTP_OK ,
110+ description: 'Successful response ' ,
111+ content: new OA \JsonContent (ref: '#/components/schemas/PaginatedSummitSponsorshipTypesResponse ' )
112+ ),
113+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
114+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
115+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
116+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
117+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
118+ ]
119+ )]
120+
121+ #[OA \Post(
122+ path: '/api/v1/summits/{id}/sponsorships-types ' ,
123+ summary: 'Create a new sponsorship type ' ,
124+ operationId: 'createSummitSponsorshipType ' ,
125+ x: [
126+ 'required-groups ' => [
127+ IGroup::SuperAdmins,
128+ IGroup::Administrators,
129+ IGroup::SummitAdministrators,
130+ ]
131+ ],
132+ security: [
133+ [
134+ 'sponsorship_types_oauth2 ' => [
135+ SummitScopes::WriteSummitData,
136+ ]
137+ ]
138+ ],
139+ tags: ['Summits Sponsorship Types ' ],
140+ parameters: [
141+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
142+ ],
143+ requestBody: new OA \RequestBody (
144+ required: true ,
145+ content: new OA \JsonContent (ref: '#/components/schemas/SummitSponsorshipTypeCreateRequest ' )
146+ ),
147+ responses: [
148+ new OA \Response (
149+ response: Response::HTTP_CREATED ,
150+ description: 'Sponsorship type created ' ,
151+ content: new OA \JsonContent (ref: '#/components/schemas/SummitSponsorshipType ' )
152+ ),
153+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
154+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
155+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
156+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
157+ new OA \Response (response: Response::HTTP_PRECONDITION_FAILED , description: "Validation Error " ),
158+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
159+ ]
160+ )]
161+
162+ #[OA \Get(
163+ path: '/api/v1/summits/{id}/sponsorships-types/{type_id} ' ,
164+ summary: 'Get a sponsorship type by ID ' ,
165+ operationId: 'getSummitSponsorshipType ' ,
166+ x: [
167+ 'required-groups ' => [
168+ IGroup::SuperAdmins,
169+ IGroup::Administrators,
170+ IGroup::SummitAdministrators,
171+ ]
172+ ],
173+ security: [
174+ [
175+ 'sponsorship_types_oauth2 ' => [
176+ SummitScopes::ReadSummitData,
177+ SummitScopes::ReadAllSummitData,
178+ ]
179+ ]
180+ ],
181+ tags: ['Summits Sponsorship Types ' ],
182+ parameters: [
183+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
184+ new OA \Parameter (name: 'type_id ' , in: 'path ' , required: true , description: 'Sponsorship Type ID ' , schema: new OA \Schema (type: 'integer ' )),
185+ new OA \Parameter (name: 'expand ' , in: 'query ' , required: false , description: 'Expand related entities ' , schema: new OA \Schema (type: 'string ' )),
186+ new OA \Parameter (name: 'fields ' , in: 'query ' , required: false , description: 'Fields to return (comma-separated) ' , schema: new OA \Schema (type: 'string ' )),
187+ new OA \Parameter (name: 'relations ' , in: 'query ' , required: false , description: 'Related entities to include (comma-separated) ' , schema: new OA \Schema (type: 'string ' )),
188+ ],
189+ responses: [
190+ new OA \Response (
191+ response: Response::HTTP_OK ,
192+ description: 'Successful response ' ,
193+ content: new OA \JsonContent (ref: '#/components/schemas/SummitSponsorshipType ' )
194+ ),
195+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
196+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
197+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
198+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
199+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
200+ ]
201+ )]
202+
203+ #[OA \Put(
204+ path: '/api/v1/summits/{id}/sponsorships-types/{type_id} ' ,
205+ summary: 'Update a sponsorship type ' ,
206+ operationId: 'updateSummitSponsorshipType ' ,
207+ x: [
208+ 'required-groups ' => [
209+ IGroup::SuperAdmins,
210+ IGroup::Administrators,
211+ IGroup::SummitAdministrators,
212+ ]
213+ ],
214+ security: [
215+ [
216+ 'sponsorship_types_oauth2 ' => [
217+ SummitScopes::WriteSummitData,
218+ ]
219+ ]
220+ ],
221+ tags: ['Summits Sponsorship Types ' ],
222+ parameters: [
223+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
224+ new OA \Parameter (name: 'type_id ' , in: 'path ' , required: true , description: 'Sponsorship Type ID ' , schema: new OA \Schema (type: 'integer ' )),
225+ ],
226+ requestBody: new OA \RequestBody (
227+ required: true ,
228+ content: new OA \JsonContent (ref: '#/components/schemas/SummitSponsorshipTypeUpdateRequest ' )
229+ ),
230+ responses: [
231+ new OA \Response (
232+ response: Response::HTTP_OK ,
233+ description: 'Sponsorship type updated ' ,
234+ content: new OA \JsonContent (ref: '#/components/schemas/SummitSponsorshipType ' )
235+ ),
236+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
237+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
238+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
239+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
240+ new OA \Response (response: Response::HTTP_PRECONDITION_FAILED , description: "Validation Error " ),
241+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
242+ ]
243+ )]
244+
245+ #[OA \Delete(
246+ path: '/api/v1/summits/{id}/sponsorships-types/{type_id} ' ,
247+ summary: 'Delete a sponsorship type ' ,
248+ operationId: 'deleteSummitSponsorshipType ' ,
249+ x: [
250+ 'required-groups ' => [
251+ IGroup::SuperAdmins,
252+ IGroup::Administrators,
253+ IGroup::SummitAdministrators,
254+ ]
255+ ],
256+ security: [
257+ [
258+ 'sponsorship_types_oauth2 ' => [
259+ SummitScopes::WriteSummitData,
260+ ]
261+ ]
262+ ],
263+ tags: ['Summits Sponsorship Types ' ],
264+ parameters: [
265+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
266+ new OA \Parameter (name: 'type_id ' , in: 'path ' , required: true , description: 'Sponsorship Type ID ' , schema: new OA \Schema (type: 'integer ' )),
267+ ],
268+ responses: [
269+ new OA \Response (response: Response::HTTP_NO_CONTENT , description: "No Content " ),
270+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
271+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
272+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
273+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
274+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
275+ ]
276+ )]
277+
72278 /**
73279 * @return array
74280 */
@@ -151,7 +357,7 @@ protected function deleteChild(Summit $summit, $child_id): void
151357 */
152358 protected function getChildFromSummit (Summit $ summit , $ child_id ): ?IEntity
153359 {
154- return $ summit ->getSummitSponsorshipTypeById (intval ($ child_id ));
360+ return $ summit ->getSummitSponsorshipTypeById (intval ($ child_id ));
155361 }
156362
157363 /**
@@ -171,7 +377,7 @@ function getUpdateValidationRules(array $payload): array
171377 */
172378 protected function updateChild (Summit $ summit , int $ child_id , array $ payload ): IEntity
173379 {
174- return $ this ->service ->update ($ summit ,$ child_id , $ payload );
380+ return $ this ->service ->update ($ summit , $ child_id , $ payload );
175381 }
176382
177383 use RequestProcessor;
@@ -184,11 +390,68 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I
184390 * @throws \models\exceptions\EntityNotFoundException
185391 * @throws \models\exceptions\ValidationException
186392 */
187- public function addBadgeImage (LaravelRequest $ request , $ summit_id , $ type_id ){
393+ #[OA \Post(
394+ path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image ' ,
395+ summary: 'Upload a badge image for a sponsorship type ' ,
396+ operationId: 'addSummitSponsorshipTypeBadgeImage ' ,
397+ x: [
398+ 'required-groups ' => [
399+ IGroup::SuperAdmins,
400+ IGroup::Administrators,
401+ IGroup::SummitAdministrators,
402+ ]
403+ ],
404+ security: [
405+ [
406+ 'sponsorship_types_oauth2 ' => [
407+ SummitScopes::WriteSummitData,
408+ ]
409+ ]
410+ ],
411+ tags: ['Summits Sponsorship Types ' ],
412+ parameters: [
413+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
414+ new OA \Parameter (name: 'type_id ' , in: 'path ' , required: true , description: 'Sponsorship Type ID ' , schema: new OA \Schema (type: 'integer ' )),
415+ ],
416+ requestBody: new OA \RequestBody (
417+ required: true ,
418+ content: new OA \MediaType (
419+ mediaType: 'multipart/form-data ' ,
420+ schema: new OA \Schema (
421+ required: ['file ' ],
422+ properties: [
423+ new OA \Property (property: 'file ' , type: 'string ' , format: 'binary ' , description: 'Image file to upload ' )
424+ ]
425+ )
426+ )
427+ ),
428+ responses: [
429+ new OA \Response (
430+ response: Response::HTTP_CREATED ,
431+ description: 'Badge image uploaded successfully ' ,
432+ content: new OA \JsonContent (
433+ properties: [
434+ new OA \Property (property: 'id ' , type: 'integer ' , example: 123 ),
435+ new OA \Property (property: 'url ' , type: 'string ' , example: 'https://example.com/badge.png ' ),
436+ new OA \Property (property: 'filename ' , type: 'string ' , example: 'badge.png ' ),
437+ ]
438+ )
439+ ),
440+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
441+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
442+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
443+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
444+ new OA \Response (response: Response::HTTP_PRECONDITION_FAILED , description: "Validation Error " ),
445+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
446+ ]
447+ )]
448+ public function addBadgeImage (LaravelRequest $ request , $ summit_id , $ type_id )
449+ {
188450 return $ this ->processRequest (function () use ($ request , $ summit_id , $ type_id ) {
189451
190452 $ summit = SummitFinderStrategyFactory::build ($ this ->getSummitRepository (), $ this ->resource_server_context )->find ($ summit_id );
191- if (is_null ($ summit )) return $ this ->error404 ();
453+ if (is_null ($ summit ))
454+ return $ this ->error404 ();
192455
193456 $ file = $ request ->file ('file ' );
194457 if (is_null ($ file )) {
@@ -214,16 +477,50 @@ public function addBadgeImage(LaravelRequest $request, $summit_id, $type_id){
214477 * @throws \models\exceptions\EntityNotFoundException
215478 * @throws \models\exceptions\ValidationException
216479 */
217- public function removeBadgeImage ($ summit_id , $ type_id ){
480+ #[OA \Delete(
481+ path: '/api/v1/summits/{id}/sponsorships-types/{type_id}/badge-image ' ,
482+ summary: 'Remove the badge image from a sponsorship type ' ,
483+ operationId: 'deleteSummitSponsorshipTypeBadgeImage ' ,
484+ x: [
485+ 'required-groups ' => [
486+ IGroup::SuperAdmins,
487+ IGroup::Administrators,
488+ IGroup::SummitAdministrators,
489+ ]
490+ ],
491+ security: [
492+ [
493+ 'sponsorship_types_oauth2 ' => [
494+ SummitScopes::WriteSummitData,
495+ ]
496+ ]
497+ ],
498+ tags: ['Summits Sponsorship Types ' ],
499+ parameters: [
500+ new OA \Parameter (name: 'id ' , in: 'path ' , required: true , description: 'Summit ID ' , schema: new OA \Schema (type: 'integer ' )),
501+ new OA \Parameter (name: 'type_id ' , in: 'path ' , required: true , description: 'Sponsorship Type ID ' , schema: new OA \Schema (type: 'integer ' )),
502+ ],
503+ responses: [
504+ new OA \Response (response: Response::HTTP_NO_CONTENT , description: "No Content " ),
505+ new OA \Response (response: Response::HTTP_BAD_REQUEST , description: "Bad Request " ),
506+ new OA \Response (response: Response::HTTP_UNAUTHORIZED , description: "Unauthorized " ),
507+ new OA \Response (response: Response::HTTP_FORBIDDEN , description: "Forbidden " ),
508+ new OA \Response (response: Response::HTTP_NOT_FOUND , description: "Not Found " ),
509+ new OA \Response (response: Response::HTTP_INTERNAL_SERVER_ERROR , description: "Server Error " ),
510+ ]
511+ )]
512+ public function removeBadgeImage ($ summit_id , $ type_id )
513+ {
218514 return $ this ->processRequest (function () use ($ summit_id , $ type_id ) {
219515
220516 $ summit = SummitFinderStrategyFactory::build ($ this ->getSummitRepository (), $ this ->resource_server_context )->find ($ summit_id );
221- if (is_null ($ summit )) return $ this ->error404 ();
517+ if (is_null ($ summit ))
518+ return $ this ->error404 ();
222519
223520 $ this ->service ->deleteBadgeImage ($ summit , $ type_id );
224521
225522 return $ this ->deleted ();
226523
227524 });
228525 }
229- }
526+ }
0 commit comments