#include "api/ApiProjectRepository.hpp" #include #include #include #include "ApiClient.hpp" #include "dto/NavDto.hpp" namespace geopro::data { namespace { constexpr int kCodeSuccess = 200; bool ok(const net::ApiResponse& r) { return r.code == kCodeSuccess; } std::string errorOf(const net::ApiResponse& r, const char* fallback) { if (!r.msg.isEmpty()) return r.msg.toStdString(); if (!r.rawError.isEmpty()) return r.rawError.toStdString(); return fallback; } } // namespace ApiProjectRepository::ApiProjectRepository(net::ApiClient& api) : api_(api) {} RepoResult> ApiProjectRepository::listWorkspaces() { const net::ApiResponse r = api_.get(QStringLiteral("/business/system/tenant/enterprise/joined/list")); if (!ok(r)) return {false, {}, errorOf(r, "listWorkspaces failed")}; return {true, dto::parseWorkspaces(r.data.value(QStringLiteral("value")).toArray()), {}}; } RepoResult ApiProjectRepository::switchWorkspace(const std::string& tenantId) { const QString path = QStringLiteral("/business/system/tenant/enterprise/switch/%1").arg(QString::fromStdString(tenantId)); const net::ApiResponse r = api_.postJson(path, QJsonObject{}); if (!ok(r)) return {false, false, errorOf(r, "switchWorkspace failed")}; return {true, true, {}}; } RepoResult> ApiProjectRepository::listProjects( const std::string& lastProjectId) { const QString path = QStringLiteral("/business/project/queryByUser?lastProjectId=%1") .arg(QString::fromStdString(lastProjectId)); const net::ApiResponse r = api_.get(path); if (!ok(r)) return {false, {}, errorOf(r, "listProjects failed")}; return {true, dto::parseProjects(r.data).projects, {}}; } RepoResult> ApiProjectRepository::loadStructure(const std::string& projectId) { const QJsonObject body{{QStringLiteral("projectId"), QString::fromStdString(projectId)}}; const net::ApiResponse r = api_.postJson(QStringLiteral("/business/projectWorkbench/queryProjectStruct"), body); if (!ok(r)) return {false, {}, errorOf(r, "loadStructure failed")}; return {true, dto::parseStructNodes(r.data.value(QStringLiteral("projectStructList")).toArray()), {}}; } RepoResult> ApiProjectRepository::loadDatasetsOfTm(const std::string& tmObjectId) { const QString path = QStringLiteral("/business/projectWorkbench/queryDsByTmObjectId/%1") .arg(QString::fromStdString(tmObjectId)); const net::ApiResponse r = api_.get(path); if (!ok(r)) return {false, {}, errorOf(r, "loadDatasetsOfTm failed")}; return {true, dto::parseDatasets(r.data.value(QStringLiteral("value")).toArray()), {}}; } } // namespace geopro::data