public function index(Request $request, ResponseFactoryContract $response, UserExtraModel $model) { $user_id = $request->user('api')->id ?? 0; $limit = $request->query('limit', 10); $offset = max(0, $request->query('offset', 0)); $users = $model->with(['user' => function ($query) { return $query->withTrashed(); }]) ->orderBy('checkin_count', 'desc') ->orderBy('updated_at', 'desc') ->offset($offset) ->limit($limit) ->get() ->map(function (UserExtraModel $item) { return $item->user; }) ->filter() ->map(function (UserModel $user) { $user->follwing = false; $user->follower = false; return $user; }) ->when($user_id, function (Collection $users) use ($user_id, $offset) { return $users->map(function (UserModel $user, $key) use ($user_id, $offset) { $user->follwing = $user->hasFollwing($user_id); $user->follower = $user->hasFollower($user_id); $user->extra->rank = $offset + $key + 1; return $user; }); }) ->values(); return $response->json($users, 200); }