integer('per_page', 25), 1), 100); $page = max((int) $request->integer('page', 1), 1); $keyword = trim((string) $request->query('keyword', '')); $q = AdminUser::query() ->with(['roles']) ->orderByDesc('id'); if ($keyword !== '') { $q->where(function ($sub) use ($keyword): void { $sub->where('username', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%') ->orWhere('email', 'like', '%'.$keyword.'%'); }); } $paginator = $q->paginate($perPage, ['*'], 'page', $page); return ApiResponse::success([ 'items' => collect($paginator->items())->map( fn (AdminUser $user): array => $this->row($user) )->all(), 'meta' => [ 'current_page' => $paginator->currentPage(), 'per_page' => $paginator->perPage(), 'total' => $paginator->total(), 'last_page' => $paginator->lastPage(), ], ]); } /** @return array */ private function row(AdminUser $user): array { return [ 'id' => (int) $user->id, 'username' => $user->username, 'nickname' => $user->name, 'email' => $user->email, 'status' => (int) $user->status, 'roles' => $user->adminRoleSlugs(), 'direct_permissions' => $user->directLegacyPermissionSlugs(), 'effective_permissions' => $user->adminPermissionSlugs(), ]; } }