|list $eventDateIds * @return list}> */ public function resolve(Tenant $tenant, Collection|array $eventDateIds): array { $eventDateIds = collect($eventDateIds)->map(fn (mixed $id): int => (int) $id)->unique()->values(); if ($eventDateIds->isEmpty()) { return []; } /** @var Collection $tickets */ $tickets = Ticket::query() ->where('tenant_code', $tenant->codigo) ->whereHas('sourcePurchaseItem.purchase', fn (Builder $query) => $query ->where('status', Purchase::STATUS_PAID)) ->whereHas('sourceVariant', function (Builder $query) use ($eventDateIds): void { $query->whereIn('event_date_id', $eventDateIds) ->orWhereHas('eventDates', fn (Builder $eventDates) => $eventDates ->whereIn('event_dates.id', $eventDateIds)); }) ->with([ ...TicketValidityResolver::RELATIONS, 'sourcePurchaseItem.purchase', ]) ->get() ->filter(fn (Ticket $ticket): bool => $ticket->is_active()) ->values(); return $tickets ->groupBy(fn (Ticket $ticket): int => (int) $ticket->sourcePurchaseItem->purchase->getKey()) ->map(function (Collection $purchaseTickets): array { return [ 'purchase_id' => (int) $purchaseTickets->first()->sourcePurchaseItem->purchase->getKey(), 'ticket_ids' => $purchaseTickets->modelKeys(), ]; }) ->values() ->all(); } }