Skip to content

Commit 379dde3

Browse files
authored
Add public Organizer API endpoints (#362)
1 parent 8a7837a commit 379dde3

File tree

6 files changed

+126
-0
lines changed

6 files changed

+126
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace HiEvents\Http\Actions\Events;
4+
5+
use HiEvents\Http\Actions\BaseAction;
6+
use HiEvents\Resources\Event\EventResourcePublic;
7+
use HiEvents\Services\Application\Handlers\Event\DTO\GetPublicOrganizerEventsDTO;
8+
use HiEvents\Services\Application\Handlers\Event\GetPublicEventsHandler;
9+
use Illuminate\Http\JsonResponse;
10+
use Illuminate\Http\Request;
11+
12+
class GetOrganizerEventsPublicAction extends BaseAction
13+
{
14+
public function __construct(
15+
private readonly GetPublicEventsHandler $handler,
16+
)
17+
{
18+
}
19+
20+
public function __invoke(int $organizerId, Request $request): JsonResponse
21+
{
22+
$events = $this->handler->handle(new GetPublicOrganizerEventsDTO(
23+
organizerId: $organizerId,
24+
queryParams: $this->getPaginationQueryParams($request),
25+
));
26+
27+
return $this->resourceResponse(
28+
resource: EventResourcePublic::class,
29+
data: $events,
30+
);
31+
}
32+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace HiEvents\Http\Actions\Organizers;
4+
5+
use HiEvents\Http\Actions\BaseAction;
6+
use HiEvents\Resources\Organizer\OrganizerResourcePublic;
7+
use HiEvents\Services\Application\Handlers\Organizer\GetPublicOrganizerHandler;
8+
use Illuminate\Http\JsonResponse;
9+
10+
class GetPublicOrganizerAction extends BaseAction
11+
{
12+
public function __construct(
13+
private readonly GetPublicOrganizerHandler $handler,
14+
)
15+
{
16+
}
17+
18+
public function __invoke(int $organizerId): JsonResponse
19+
{
20+
return $this->resourceResponse(
21+
resource: OrganizerResourcePublic::class,
22+
data: $this->handler->handle($organizerId),
23+
);
24+
}
25+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace HiEvents\Services\Application\Handlers\Event\DTO;
4+
5+
use HiEvents\DataTransferObjects\BaseDTO;
6+
use HiEvents\Http\DTO\QueryParamsDTO;
7+
8+
class GetPublicOrganizerEventsDTO extends BaseDTO
9+
{
10+
public function __construct(
11+
public int $organizerId,
12+
public QueryParamsDTO $queryParams,
13+
)
14+
{
15+
}
16+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace HiEvents\Services\Application\Handlers\Event;
4+
5+
use HiEvents\DomainObjects\Status\EventStatus;
6+
use HiEvents\Repository\Interfaces\EventRepositoryInterface;
7+
use HiEvents\Services\Application\Handlers\Event\DTO\GetPublicOrganizerEventsDTO;
8+
use Illuminate\Pagination\LengthAwarePaginator;
9+
10+
class GetPublicEventsHandler
11+
{
12+
public function __construct(
13+
private readonly EventRepositoryInterface $eventRepository,
14+
)
15+
{
16+
}
17+
18+
public function handle(GetPublicOrganizerEventsDTO $dto): LengthAwarePaginator
19+
{
20+
return $this->eventRepository->findEvents(
21+
where: [
22+
'organizer_id' => $dto->organizerId,
23+
'status' => EventStatus::LIVE->name,
24+
],
25+
params: $dto->queryParams
26+
);
27+
}
28+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace HiEvents\Services\Application\Handlers\Organizer;
4+
5+
use HiEvents\Repository\Interfaces\OrganizerRepositoryInterface;
6+
7+
class GetPublicOrganizerHandler
8+
{
9+
public function __construct(
10+
private readonly OrganizerRepositoryInterface $organizerRepository
11+
)
12+
{
13+
}
14+
15+
public function handle(int $organizerId)
16+
{
17+
return $this->organizerRepository->findById($organizerId);
18+
}
19+
}

backend/routes/api.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
use HiEvents\Http\Actions\Events\GetEventAction;
4242
use HiEvents\Http\Actions\Events\GetEventPublicAction;
4343
use HiEvents\Http\Actions\Events\GetEventsAction;
44+
use HiEvents\Http\Actions\Events\GetOrganizerEventsPublicAction;
4445
use HiEvents\Http\Actions\Events\Images\CreateEventImageAction;
4546
use HiEvents\Http\Actions\Events\Images\DeleteEventImageAction;
4647
use HiEvents\Http\Actions\Events\Images\GetEventImagesAction;
@@ -75,6 +76,7 @@
7576
use HiEvents\Http\Actions\Organizers\GetOrganizerAction;
7677
use HiEvents\Http\Actions\Organizers\GetOrganizerEventsAction;
7778
use HiEvents\Http\Actions\Organizers\GetOrganizersAction;
79+
use HiEvents\Http\Actions\Organizers\GetPublicOrganizerAction;
7880
use HiEvents\Http\Actions\ProductCategories\CreateProductCategoryAction;
7981
use HiEvents\Http\Actions\ProductCategories\DeleteProductCategoryAction;
8082
use HiEvents\Http\Actions\ProductCategories\EditProductCategoryAction;
@@ -267,6 +269,10 @@ function (Router $router): void {
267269
// Events
268270
$router->get('/events/{event_id}', GetEventPublicAction::class);
269271

272+
// Organizers
273+
$router->get('/organizers/{organizer_id}', GetPublicOrganizerAction::class);
274+
$router->get('/organizers/{organizer_id}/events', GetOrganizerEventsPublicAction::class);
275+
270276
// Products
271277
$router->get('/events/{event_id}/products', GetEventPublicAction::class);
272278

0 commit comments

Comments
 (0)