feat(tickets): enhance ticket search functionality and add ticket counts to response
This commit is contained in:
@@ -5,26 +5,39 @@ namespace App\Domains\Ticket\Services;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use App\Domains\Ticket\Models\Ticket;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
|
||||
class AdminAppTicketService
|
||||
{
|
||||
/** @return array{scanned_tickets: int, total_tickets: int} */
|
||||
public function counts(Tenant $tenant): array
|
||||
/**
|
||||
* @param array{q?: string|null, page?: int, per_page?: int} $filters
|
||||
*/
|
||||
public function search(Tenant $tenant, array $filters = []): AdminAppTicketResult
|
||||
{
|
||||
$query = Ticket::query()->where('tenant_code', $tenant->codigo);
|
||||
$query = $this->baseQuery($tenant, $filters);
|
||||
|
||||
return [
|
||||
'scanned_tickets' => (clone $query)->whereNotNull('used_at')->count(),
|
||||
'total_tickets' => $query->count(),
|
||||
];
|
||||
$tickets = (clone $query)
|
||||
->with([
|
||||
...TicketValidityResolver::RELATIONS,
|
||||
...TicketPresentationResolver::RELATIONS,
|
||||
'user',
|
||||
'sourceCatalogItem.category',
|
||||
])
|
||||
->orderByDesc('id')
|
||||
->paginateFromRequest()
|
||||
->withQueryString();
|
||||
|
||||
return new AdminAppTicketResult(
|
||||
tickets: $tickets,
|
||||
scannedTickets: (clone $query)->whereNotNull('used_at')->count(),
|
||||
totalTickets: $tickets->total(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array{q?: string|null, page?: int, per_page?: int} $filters
|
||||
* @return LengthAwarePaginator<Ticket>
|
||||
* @return Builder<Ticket>
|
||||
*/
|
||||
public function list(Tenant $tenant, array $filters = []): LengthAwarePaginator
|
||||
private function baseQuery(Tenant $tenant, array $filters): Builder
|
||||
{
|
||||
$search = trim((string) ($filters['q'] ?? ''));
|
||||
|
||||
@@ -38,15 +51,6 @@ class AdminAppTicketService
|
||||
fn (Builder $searchQuery): Builder => $searchQuery
|
||||
->where('ticket', 'like', "%{$search}%"),
|
||||
);
|
||||
})
|
||||
->with([
|
||||
...TicketValidityResolver::RELATIONS,
|
||||
...TicketPresentationResolver::RELATIONS,
|
||||
'user',
|
||||
'sourceCatalogItem.category',
|
||||
])
|
||||
->orderByDesc('id')
|
||||
->paginateFromRequest()
|
||||
->withQueryString();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user