#pragma once #include #include #include "repo/RepoTypes.hpp" namespace geopro::data { // 仓储结果信封:网络可失败,故用显式 Result 而非抛异常,便于 UI 出错误/空状态。 template struct RepoResult { bool ok = false; T value{}; std::string error; }; // 导航仓储抽象(同步;呼应既有 IDatasetRepository 风格)。 class IProjectRepository { public: virtual ~IProjectRepository() = default; virtual RepoResult> listWorkspaces() = 0; virtual RepoResult switchWorkspace(const std::string& tenantId) = 0; // 项目分页:nameFilter 名称模糊(可空)、typeId 类型过滤(空=不限)、pageNo 从 1 起。 virtual RepoResult pageProjects(const std::string& nameFilter, const std::string& typeId, int pageNo, int pageSize) = 0; // 项目类型列表(弹窗类型过滤下拉)。 virtual RepoResult> listProjectTypes() = 0; virtual RepoResult> loadStructure(const std::string& projectId) = 0; // 按 TM 分页拉数据/文件行:classifyType 3=数据 1=文件;pageNo 从 1 起,pageSize 固定 5。 virtual RepoResult loadTmRows(const std::string& projectId, const std::string& tmObjectId, int classifyType, int pageNo) = 0; }; } // namespace geopro::data