baseQuery($tenant, $filters); $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 Builder */ private function baseQuery(Tenant $tenant, array $filters): Builder { $search = trim((string) ($filters['q'] ?? '')); return Ticket::query() ->where('tenant_code', $tenant->codigo) ->when($search !== '', function (Builder $query) use ($search): void { $query->when( ctype_digit($search), fn (Builder $searchQuery): Builder => $searchQuery ->where('tickets.id', (int) $search), fn (Builder $searchQuery): Builder => $searchQuery ->where('ticket', 'like', "%{$search}%"), ); }); } }