Skip to content

Commit 61e5bda

Browse files
committed
feat: add public routes
1 parent 5d26c96 commit 61e5bda

File tree

1 file changed

+228
-4
lines changed

1 file changed

+228
-4
lines changed

app/Http/Controllers/Apis/Protected/Main/OAuth2SponsoredProjectApiController.php

Lines changed: 228 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,54 @@ protected function updateEntity($id, array $payload): IEntity
146146
return $this->service->update(intval($id), HTMLCleaner::cleanData($payload, ['description']));
147147
}
148148

149+
#[OA\Get(
150+
path: "/api/public/v1/sponsored-projects",
151+
description: "Get all sponsored projects (public endpoint)",
152+
summary: 'Read All Sponsored Projects (Public)',
153+
operationId: 'getAllSponsoredProjectsPublic',
154+
tags: ['Sponsored Projects'],
155+
parameters: [
156+
new OA\Parameter(
157+
name: 'filter[]',
158+
in: 'query',
159+
required: false,
160+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
161+
style: 'form',
162+
explode: true,
163+
schema: new OA\Schema(
164+
type: 'array',
165+
items: new OA\Items(type: 'string', example: 'name@@project')
166+
)
167+
),
168+
new OA\Parameter(
169+
name: 'order',
170+
in: 'query',
171+
required: false,
172+
description: 'Order by field(s)',
173+
schema: new OA\Schema(type: 'string', example: 'name,id')
174+
),
175+
new OA\Parameter(
176+
name: 'page',
177+
in: 'query',
178+
required: false,
179+
schema: new OA\Schema(type: 'integer', default: 1)
180+
),
181+
new OA\Parameter(
182+
name: 'per_page',
183+
in: 'query',
184+
required: false,
185+
schema: new OA\Schema(type: 'integer', default: 10)
186+
),
187+
],
188+
responses: [
189+
new OA\Response(
190+
response: 200,
191+
description: 'List of sponsored projects',
192+
content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSponsoredProjectsResponse')
193+
),
194+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
195+
]
196+
)]
149197
#[OA\Get(
150198
path: "/api/v1/sponsored-projects",
151199
description: "Get all sponsored projects",
@@ -167,7 +215,7 @@ protected function updateEntity($id, array $payload): IEntity
167215
name: 'filter[]',
168216
in: 'query',
169217
required: false,
170-
description: 'Filter expressions in the format field<op>value',
218+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
171219
style: 'form',
172220
explode: true,
173221
schema: new OA\Schema(
@@ -291,6 +339,31 @@ public function add()
291339
return parent::add();
292340
}
293341

342+
#[OA\Get(
343+
path: "/api/public/v1/sponsored-projects/{id}",
344+
description: "Get a specific sponsored project (public endpoint)",
345+
summary: 'Read Sponsored Project (Public)',
346+
operationId: 'getSponsoredProjectPublic',
347+
tags: ['Sponsored Projects'],
348+
parameters: [
349+
new OA\Parameter(
350+
name: 'id',
351+
in: 'path',
352+
required: true,
353+
schema: new OA\Schema(type: 'string'),
354+
description: 'The sponsored project id or slug'
355+
),
356+
],
357+
responses: [
358+
new OA\Response(
359+
response: 200,
360+
description: 'Sponsored project details',
361+
content: new OA\JsonContent(ref: '#/components/schemas/SponsoredProject')
362+
),
363+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
364+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
365+
]
366+
)]
294367
#[OA\Get(
295368
path: "/api/v1/sponsored-projects/{id}",
296369
description: "Get a specific sponsored project",
@@ -439,6 +512,62 @@ public function delete($id)
439512

440513
// sponsorship types
441514

515+
#[OA\Get(
516+
path: "/api/public/v1/sponsored-projects/{id}/sponsorship-types",
517+
description: "Get all sponsorship types for a sponsored project (public endpoint)",
518+
summary: 'Read All Sponsorship Types (Public)',
519+
operationId: 'getAllSponsorshipTypesPublic',
520+
tags: ['Sponsored Projects', 'Sponsorship Types'],
521+
parameters: [
522+
new OA\Parameter(
523+
name: 'id',
524+
in: 'path',
525+
required: true,
526+
schema: new OA\Schema(type: 'string'),
527+
description: 'The sponsored project id or slug'
528+
),
529+
new OA\Parameter(
530+
name: 'filter[]',
531+
in: 'query',
532+
required: false,
533+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
534+
style: 'form',
535+
explode: true,
536+
schema: new OA\Schema(
537+
type: 'array',
538+
items: new OA\Items(type: 'string', example: 'name@@type')
539+
)
540+
),
541+
new OA\Parameter(
542+
name: 'order',
543+
in: 'query',
544+
required: false,
545+
description: 'Order by field(s)',
546+
schema: new OA\Schema(type: 'string', example: 'order,name')
547+
),
548+
new OA\Parameter(
549+
name: 'page',
550+
in: 'query',
551+
required: false,
552+
schema: new OA\Schema(type: 'integer', default: 1)
553+
),
554+
new OA\Parameter(
555+
name: 'per_page',
556+
in: 'query',
557+
required: false,
558+
schema: new OA\Schema(type: 'integer', default: 10)
559+
),
560+
],
561+
responses: [
562+
new OA\Response(
563+
response: 200,
564+
description: 'List of sponsorship types',
565+
content: new OA\JsonContent(ref: '#/components/schemas/PaginatedProjectSponsorshipTypesResponse')
566+
),
567+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
568+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
569+
]
570+
)]
442571
#[OA\Get(
443572
path: "/api/v1/sponsored-projects/{id}/sponsorship-types",
444573
description: "Get all sponsorship types for a sponsored project",
@@ -467,7 +596,7 @@ public function delete($id)
467596
name: 'filter[]',
468597
in: 'query',
469598
required: false,
470-
description: 'Filter expressions in the format field<op>value',
599+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
471600
style: 'form',
472601
explode: true,
473602
schema: new OA\Schema(
@@ -558,6 +687,38 @@ function ($page, $per_page, $filter, $order, $applyExtraFilters) {
558687
);
559688
}
560689

690+
#[OA\Get(
691+
path: "/api/public/v1/sponsored-projects/{id}/sponsorship-types/{sponsorship_type_id}",
692+
description: "Get a specific sponsorship type (public endpoint)",
693+
summary: 'Read Sponsorship Type (Public)',
694+
operationId: 'getSponsorshipTypePublic',
695+
tags: ['Sponsored Projects', 'Sponsorship Types'],
696+
parameters: [
697+
new OA\Parameter(
698+
name: 'id',
699+
in: 'path',
700+
required: true,
701+
schema: new OA\Schema(type: 'string'),
702+
description: 'The sponsored project id or slug'
703+
),
704+
new OA\Parameter(
705+
name: 'sponsorship_type_id',
706+
in: 'path',
707+
required: true,
708+
schema: new OA\Schema(type: 'integer'),
709+
description: 'The sponsorship type id'
710+
),
711+
],
712+
responses: [
713+
new OA\Response(
714+
response: 200,
715+
description: 'Sponsorship type details',
716+
content: new OA\JsonContent(ref: '#/components/schemas/ProjectSponsorshipType')
717+
),
718+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
719+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
720+
]
721+
)]
561722
#[OA\Get(
562723
path: "/api/v1/sponsored-projects/{id}/sponsorship-types/{sponsorship_type_id}",
563724
description: "Get a specific sponsorship type",
@@ -833,6 +994,69 @@ function ($sponsorship_type_id, $project_id){
833994

834995
// supporting companies
835996

997+
#[OA\Get(
998+
path: "/api/public/v1/sponsored-projects/{id}/sponsorship-types/{sponsorship_type_id}/supporting-companies",
999+
description: "Get all supporting companies for a sponsorship type (public endpoint)",
1000+
summary: 'Read All Supporting Companies (Public)',
1001+
operationId: 'getSupportingCompaniesPublic',
1002+
tags: ['Sponsored Projects', 'Supporting Companies'],
1003+
parameters: [
1004+
new OA\Parameter(
1005+
name: 'id',
1006+
in: 'path',
1007+
required: true,
1008+
schema: new OA\Schema(type: 'string'),
1009+
description: 'The sponsored project id or slug'
1010+
),
1011+
new OA\Parameter(
1012+
name: 'sponsorship_type_id',
1013+
in: 'path',
1014+
required: true,
1015+
schema: new OA\Schema(type: 'string'),
1016+
description: 'The sponsorship type id or slug'
1017+
),
1018+
new OA\Parameter(
1019+
name: 'filter[]',
1020+
in: 'query',
1021+
required: false,
1022+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
1023+
style: 'form',
1024+
explode: true,
1025+
schema: new OA\Schema(
1026+
type: 'array',
1027+
items: new OA\Items(type: 'string')
1028+
)
1029+
),
1030+
new OA\Parameter(
1031+
name: 'order',
1032+
in: 'query',
1033+
required: false,
1034+
description: 'Order by field(s)',
1035+
schema: new OA\Schema(type: 'string', example: 'order,name')
1036+
),
1037+
new OA\Parameter(
1038+
name: 'page',
1039+
in: 'query',
1040+
required: false,
1041+
schema: new OA\Schema(type: 'integer', default: 1)
1042+
),
1043+
new OA\Parameter(
1044+
name: 'per_page',
1045+
in: 'query',
1046+
required: false,
1047+
schema: new OA\Schema(type: 'integer', default: 10)
1048+
),
1049+
],
1050+
responses: [
1051+
new OA\Response(
1052+
response: 200,
1053+
description: 'List of supporting companies',
1054+
content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSupportingCompaniesResponse')
1055+
),
1056+
new OA\Response(response: Response::HTTP_NOT_FOUND, description: "not found"),
1057+
new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"),
1058+
]
1059+
)]
8361060
#[OA\Get(
8371061
path: "/api/v1/sponsored-projects/{id}/sponsorship-types/{sponsorship_type_id}/supporting-companies",
8381062
description: "Get all supporting companies for a sponsorship type",
@@ -868,7 +1092,7 @@ function ($sponsorship_type_id, $project_id){
8681092
name: 'filter[]',
8691093
in: 'query',
8701094
required: false,
871-
description: 'Filter expressions',
1095+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
8721096
style: 'form',
8731097
explode: true,
8741098
schema: new OA\Schema(
@@ -1440,7 +1664,7 @@ public function deleteSponsoredProjectLogo($project_id){
14401664
name: 'filter[]',
14411665
in: 'query',
14421666
required: false,
1443-
description: 'Filter expressions in the format field<op>value',
1667+
description: 'Filter expressions in the format field<op>value, operators: =@ (starts with), == (equals), @@ (contains), fields: name, slug, is_active',
14441668
style: 'form',
14451669
explode: true,
14461670
schema: new OA\Schema(

0 commit comments

Comments
 (0)