Skip to content

Commit dbb2bac

Browse files
committed
feat: new endpoint
1 parent 2fc6ad2 commit dbb2bac

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace HiEvents\Http\Actions\Attendees;
4+
5+
use HiEvents\DomainObjects\Generated\AttendeeDomainObjectAbstract;
6+
use HiEvents\DomainObjects\TicketDomainObject;
7+
use HiEvents\DomainObjects\TicketPriceDomainObject;
8+
use HiEvents\Http\Actions\BaseAction;
9+
use HiEvents\Repository\Eloquent\Value\Relationship;
10+
use HiEvents\Repository\Interfaces\AttendeeRepositoryInterface;
11+
use HiEvents\Resources\Attendee\AttendeeCheckinLimitedResourcePublic;
12+
use HiEvents\Resources\Attendee\AttendeeResourcePublic;
13+
use Illuminate\Http\JsonResponse;
14+
use Illuminate\Http\Response;
15+
16+
class GetAttendeeTicketInfoActionPublic extends BaseAction
17+
{
18+
private AttendeeRepositoryInterface $attendeeRepository;
19+
20+
public function __construct(AttendeeRepositoryInterface $attendeeRepository)
21+
{
22+
$this->attendeeRepository = $attendeeRepository;
23+
}
24+
25+
/**
26+
* @todo move to handler
27+
*/
28+
public function __invoke(string $attendeePublicId): JsonResponse|Response
29+
{
30+
$attendee = $this->attendeeRepository
31+
->loadRelation(new Relationship(
32+
domainObject: TicketDomainObject::class,
33+
nested: [
34+
new Relationship(
35+
domainObject: TicketPriceDomainObject::class,
36+
),
37+
], name: 'ticket'))
38+
->findFirstWhere([
39+
AttendeeDomainObjectAbstract::PUBLIC_ID => $attendeePublicId
40+
]);
41+
42+
if (!$attendee) {
43+
return $this->notFoundResponse();
44+
}
45+
46+
return $this->resourceResponse(AttendeeCheckinLimitedResourcePublic::class, $attendee);
47+
}
48+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace HiEvents\Resources\Attendee;
4+
5+
use HiEvents\DomainObjects\AttendeeDomainObject;
6+
use HiEvents\Resources\Ticket\TicketMinimalResourcePublic;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Http\Resources\Json\JsonResource;
9+
10+
/**
11+
* @mixin AttendeeDomainObject
12+
*/
13+
class AttendeeCheckinLimitedResourcePublic extends JsonResource
14+
{
15+
public function toArray(Request $request): array
16+
{
17+
return [
18+
'id' => $this->getId(),
19+
'public_id' => $this->getPublicId(),
20+
'ticket_id' => $this->getTicketId(),
21+
'ticket_price_id' => $this->getTicketPriceId(),
22+
'ticket' => $this->when((bool)$this->getTicket(), fn() => new TicketMinimalResourcePublic($this->getTicket())),
23+
];
24+
}
25+
}

backend/routes/api.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@
108108
use HiEvents\Http\Actions\Users\UpdateUserAction;
109109
use Illuminate\Routing\Router;
110110

111+
use HiEvents\Http\Actions\Attendees\GetAttendeeTicketInfoActionPublic;
112+
111113
/** @var Router|Router $router */
112114
$router = app()->get('router');
113115

@@ -258,6 +260,7 @@ function (Router $router): void {
258260

259261
// Attendees
260262
$router->get('/events/{event_id}/attendees/{attendee_short_id}', GetAttendeeActionPublic::class);
263+
$router->get('/attendees/get-ticket-info/{attendee_public_id}', GetAttendeeTicketInfoActionPublic::class);
261264

262265
// Promo codes
263266
$router->get('/events/{event_id}/promo-codes/{promo_code}', GetPromoCodePublic::class);

0 commit comments

Comments
 (0)