query('q', '')); if (mb_strlen($q) < 2) { return response()->json(['results' => []]); } return response()->json([ 'results' => $this->resultsForUser($request->user(), $q), ]); } /** @return list */ private function resultsForUser($user, string $q): array { $like = '%'.$q.'%'; $results = []; $serverTypes = [HostingProduct::TYPE_VPS, HostingProduct::TYPE_DEDICATED]; CustomerHostingOrder::query() ->forUser($user->id) ->whereHas('product', fn ($query) => $query->whereIn('type', $serverTypes)) ->where(function ($query) use ($like) { $query->where('domain_name', 'like', $like) ->orWhere('server_ip', 'like', $like); }) ->with('product') ->orderByDesc('updated_at') ->limit(12) ->get() ->each(function (CustomerHostingOrder $order) use (&$results): void { $panelUrl = $order->control_panel_url ?: route('servers.orders.show', $order); $results[] = [ 'type' => 'server', 'title' => $order->domain_name ?: ($order->product?->name ?? 'Server #'.$order->id), 'subtitle' => ($order->product?->name ?? 'Server').' ยท '.ucwords(str_replace('_', ' ', (string) $order->status)), 'url' => $panelUrl, ]; }); return $results; } }