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);
}