Skip to content

Commit 7833bfc

Browse files
committed
feat: add new filters to orders/tickets endpoints (#386)
* feat: add new filters to orders/tickets endpoints GET api/v1/summits/{id}/orders/me * tickets_owner_email * tickets_number GET api/v1/summits/{id}/orders/all/tickets/me * order_number * number * order_owner_email GET api/v1/summits/all/orders/{order_id}/tickets * number * owner_email * fix: add missing filter order_owner_email * fix: query missing class * chore: fix filter
1 parent 017f662 commit 7833bfc

5 files changed

Lines changed: 202 additions & 179 deletions

File tree

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,13 +420,15 @@ public function getAllMyOrdersBySummit($summit_id)
420420
return $this->_getAll(
421421
function () {
422422
return [
423-
'number' => ['=@', '=='],
423+
'number' => ['=@', '==','@@'],
424424
'summit_id' => ['=='],
425425
'status' => ['==', '<>'],
426426
'owner_id' => ['=='],
427427
'created' => ['>', '<', '<=', '>=', '==','[]'],
428+
'tickets_number' => ['=@', '==','@@'],
428429
'tickets_assigned_to' => ['=='],
429430
'tickets_owner_status' => ['=='],
431+
'tickets_owner_email' => ['=@', '==','@@'],
430432
'tickets_badge_features_id' => ['=='],
431433
'tickets_type_id' => ['=='],
432434
'amount' => ['==', '<>', '>=', '>'],
@@ -440,7 +442,9 @@ function () {
440442
'summit_id' => 'sometimes|integer',
441443
'owner_id' => 'sometimes|integer',
442444
'created' => 'sometimes|required|date_format:U|epoch_seconds',
445+
'tickets_number' => 'sometimes|string',
443446
'tickets_assigned_to' => sprintf('sometimes|in:%s', implode(',', ['Me', 'SomeoneElse', 'Nobody'])),
447+
'tickets_owner_email' => 'sometimes|string',
444448
'tickets_owner_status' => sprintf('sometimes|in:%s', implode(',', SummitAttendee::AllowedStatus)),
445449
'tickets_badge_features_id' => 'sometimes|integer',
446450
'tickets_type_id' => 'sometimes|integer',
@@ -1121,6 +1125,8 @@ public function getMyTicketsByOrderId($order_id)
11211125
return $this->_getAll(
11221126
function () {
11231127
return [
1128+
'number' => ['=@', '==', '@@'],
1129+
'owner_email' => ['=@', '==', '@@'],
11241130
'order_id' => ['=='],
11251131
'order_owner_id' => ['=='],
11261132
'is_active' => ['=='],
@@ -1134,6 +1140,8 @@ function () {
11341140
},
11351141
function () {
11361142
return [
1143+
'number' => 'sometimes|string',
1144+
'owner_email' => 'sometimes|string',
11371145
'order_id' => 'sometimes|integer',
11381146
'order_owner_id' => 'sometimes|integer',
11391147
'is_active' => ['sometimes', new Boolean()],
@@ -1370,4 +1378,4 @@ public function delegateTicket($summit_id, $order_id, $ticket_id)
13701378
));
13711379
});
13721380
}
1373-
}
1381+
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,8 +621,9 @@ public function getAllMyTicketsBySummit($summit_id)
621621
return $this->_getAll(
622622
function () {
623623
return [
624-
'number' => ['=@', '=='],
625-
'order_number' => ['=@', '=='],
624+
'number' => ['=@', '==', '@@'],
625+
'order_number' => ['=@', '==', '@@'],
626+
'order_owner_email' => ['=@', '==', '@@'],
626627
'summit_id' => ['=='],
627628
'order_id' => ['=='],
628629
'status' => ['==', '<>'],
@@ -640,6 +641,7 @@ function () {
640641
return [
641642
'number' => 'sometimes|string',
642643
'order_number' => 'sometimes|string',
644+
'order_owner_email' => 'sometimes|string',
643645
'summit_id' => 'sometimes|integer',
644646
'order_id' => 'sometimes|integer',
645647
'order_owner_id' => 'sometimes|integer',

app/Repositories/ResourceServer/DoctrineApiEndpointRepository.php

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,22 @@ final class DoctrineApiEndpointRepository
3838
public function getApiEndpointByUrlAndMethod($url, $http_method)
3939
{
4040
try {
41-
return $this->getEntityManager()->createQueryBuilder()
42-
->select("e")
43-
->from(\App\Models\ResourceServer\ApiEndpoint::class, "e")
41+
$em = $this->getEntityManager();
42+
43+
$qb = $em->createQueryBuilder();
44+
$qb->select('e')
45+
->from(ApiEndpoint::class, 'e')
46+
->leftJoin('e.scopes', 's', 'WITH', 's.active = true')
47+
->addSelect('s')
4448
->where('e.route = :route')
45-
->andWhere('e.http_method = :http_method')
49+
->andWhere('e.http_method = :method')
4650
->setParameter('route', trim($url))
47-
->setParameter('http_method', trim($http_method))
48-
->setCacheable(true)
49-
->setCacheRegion('resource_server_region')
50-
->getQuery()
51-
->getOneOrNullResult();
51+
->setParameter('method', strtoupper(trim($http_method)));
52+
53+
$q = $qb->getQuery();
54+
$q->setCacheable(false);
55+
56+
return $q->getOneOrNullResult();
5257
}
5358
catch(\Exception $ex){
5459
Log::error($ex);
@@ -80,4 +85,4 @@ protected function getOrderMappings()
8085
return [];
8186
}
8287

83-
}
88+
}

app/Repositories/Summit/DoctrineSummitAttendeeTicketRepository.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,10 @@ private function requiredAliases(?Filter $filter, ?Order $order): array
9898
$val = fn(string $f) => $filter?->getValue($f)[0] ?? null;
9999

100100
// --- Filters ---
101-
if ($has('order_number') || $has('order_id') || $has('order_owner_id') || $has('bought_date') || $has('summit_id')) {
101+
if ($has('order_number') || $has('order_id') || $has('order_owner_id') || $has('order_owner_email')
102+
|| $has('bought_date') || $has('summit_id')) {
102103
$need['o'] = true;
103-
if ($has('order_owner_id')) {
104+
if ($has('order_owner_id') || $has('order_owner_email')) {
104105
$this->joinCatalog['ord_m'][1] = 'join';
105106
$need['ord_m'] = true;
106107
}
@@ -265,6 +266,7 @@ protected function getFilterMappings()
265266
'number' => 'e.number:json_string',
266267
'is_active' => 'e.is_active',
267268
'order_number' => 'o.number:json_string',
269+
'order_owner_email' => 'COALESCE(ord_m.email, o.owner_email)',
268270
'owner_name' => "COALESCE(LOWER(CONCAT(a.first_name, ' ', a.surname)),LOWER(CONCAT(m.first_name, ' ', m.last_name)))",
269271
'owner_company' => 'COALESCE(a.company_name, a_c.name)',
270272
'has_owner_company' => new DoctrineSwitchFilterMapping([

0 commit comments

Comments
 (0)