$ticketStatuses * @return array, tickets: array>}> */ public function handle(User $viewer, Collection $ticketStatuses, ?Project $project = null): array { /** @var EloquentCollection $visibleProjects */ $visibleProjects = $this->listVisibleProjects->handle($viewer); if ($project !== null) { $visibleProjects = $visibleProjects ->where('id', $project->id) ->values(); } $visibleProjectIds = $visibleProjects->pluck('id')->all(); if ($visibleProjectIds === [] || $ticketStatuses->isEmpty()) { return []; } $ticketStatusIds = $ticketStatuses->pluck('id')->all(); /** @var Collection> $ticketsByProject */ $ticketsByProject = Ticket::query() ->whereIn('project_id', $visibleProjectIds) ->whereIn('ticket_status_id', $ticketStatusIds) ->with([ 'assignee', 'project', 'ticketPriority', 'ticketStatus.boardColumn', 'ticketType', ]) ->orderByDesc('sequence_number') ->get() ->groupBy('project_id'); return $visibleProjects ->filter(fn (Project $visibleProject): bool => $ticketsByProject->has($visibleProject->id)) ->map(fn (Project $visibleProject): array => [ 'project' => ProjectResource::make($visibleProject)->resolve(), 'tickets' => TicketResource::collection($ticketsByProject->get($visibleProject->id))->resolve(), ]) ->values() ->all(); } }