validated('q'); $perPage = (int) ($request->validated('per_page') ?? 20); if ($request->validated('type') === 'users') { $users = User::query() ->whereKeyNot($request->user()->getKey()) ->whereNull('suspended_at') ->withoutBlockingRelationshipWith($request->user()) ->where(function (Builder $builder) use ($query): void { $builder ->whereLike('name', "%{$query}%", caseSensitive: false) ->orWhereLike('bio', "%{$query}%", caseSensitive: false); }) ->orderByRaw('CASE WHEN LOWER(name) = LOWER(?) THEN 0 WHEN LOWER(name) LIKE LOWER(?) THEN 1 ELSE 2 END', [ $query, "{$query}%", ]) ->orderBy('name') ->paginate($perPage) ->withQueryString(); return SearchUserResource::collection($users); } $meals = MealPosts::query() ->where('visibility', MealPostVisibility::Public) ->whereNull('hidden_at') ->whereHas( 'user', fn (Builder $builder): Builder => $builder ->whereNull('suspended_at') ->withoutBlockingRelationshipWith($request->user()) ) ->where(function (Builder $builder) use ($query): void { $builder ->whereLike('title', "%{$query}%", caseSensitive: false) ->orWhereLike('caption', "%{$query}%", caseSensitive: false) ->orWhereHas( 'ingredients', fn (Builder $ingredientQuery): Builder => $ingredientQuery ->whereLike('ingredient', "%{$query}%", caseSensitive: false) ); }) ->with('user:id,name,avatar_url,account_verified_at') ->latest('eaten_at') ->paginate($perPage) ->withQueryString(); return MealPostsResource::collection($meals); } }