validate(['page' => ['sometimes', 'integer', 'min:1'], 'per_page' => ['sometimes', 'integer', 'min:1', 'max:100']]); $user = $this->kanbanGitMcp->user($request); $projects = Project::query()->whereIn('id', $this->permissionService->viewableProjectIds($user)) ->orderBy('id')->paginate($input['per_page'] ?? 25, ['id', 'key', 'name'], 'page', $input['page'] ?? 1); return Response::structured([ 'data' => $projects->getCollection()->map(fn (Project $project): array => ['id' => $project->id, 'key' => $project->key, 'name' => $project->name])->all(), 'meta' => $this->kanbanGitMcp->paginationPayload($projects), ]); } /** @return array */ public function schema(JsonSchema $schema): array { return [ 'page' => $schema->integer()->min(1)->description('Page number, defaults to 1.'), 'per_page' => $schema->integer()->min(1)->max(100)->description('Page size, defaults to 25; maximum 100.'), ]; } }