From a32bd763da69921093db93dbd617c49f512953a4 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Tue, 9 Jun 2026 11:16:36 +0800 Subject: [PATCH] feat(data): NavDto parseProjects/parseStructNodes/parseDatasets --- src/data/dto/NavDto.cpp | 53 ++++++++++++++++++++++++++++++++++--- tests/data/test_nav_dto.cpp | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 3 deletions(-) diff --git a/src/data/dto/NavDto.cpp b/src/data/dto/NavDto.cpp index 57a9046..57f43b1 100644 --- a/src/data/dto/NavDto.cpp +++ b/src/data/dto/NavDto.cpp @@ -25,9 +25,56 @@ std::vector parseWorkspaces(const QJsonArray& arr) { return out; } -ProjectPage parseProjects(const QJsonObject&) { return {}; } -std::vector parseStructNodes(const QJsonArray&) { return {}; } -std::vector parseDatasets(const QJsonArray&) { return {}; } +ProjectPage parseProjects(const QJsonObject& data) { + ProjectPage page; + page.hasNextPage = data.value(QStringLiteral("hasNextPage")).toBool(); + const QJsonArray list = data.value(QStringLiteral("projectList")).toArray(); + page.projects.reserve(static_cast(list.size())); + for (const QJsonValue& v : list) { + const QJsonObject o = v.toObject(); + ProjectSummary p; + p.id = str(o, "id"); + p.name = str(o, "projectName"); + p.typeName = str(o, "projectTypeName"); + p.crsCode = str(o, "referenceCRSCode"); + p.crsName = str(o, "referenceCRSName"); + p.status = o.value(QStringLiteral("status")).toInt(); + page.projects.push_back(std::move(p)); + } + return page; +} + +std::vector parseStructNodes(const QJsonArray& arr) { + std::vector out; + out.reserve(static_cast(arr.size())); + for (const QJsonValue& v : arr) { + const QJsonObject o = v.toObject(); + StructNode n; + n.id = str(o, "id"); + n.name = str(o, "name"); + n.parentId = str(o, "parentId"); + n.typeName = str(o, "typeName"); + n.confCode = str(o, "confCode"); + n.type = o.value(QStringLiteral("type")).toInt(); + out.push_back(std::move(n)); + } + return out; +} + +std::vector parseDatasets(const QJsonArray& arr) { + std::vector out; + out.reserve(static_cast(arr.size())); + for (const QJsonValue& v : arr) { + const QJsonObject o = v.toObject(); + DsNode d; + d.id = str(o, "id"); + d.name = str(o, "name"); + d.ddType = str(o, "ddCode"); + out.push_back(std::move(d)); + } + return out; +} + std::vector buildStructTree(const std::vector&) { return {}; } } // namespace geopro::data::dto diff --git a/tests/data/test_nav_dto.cpp b/tests/data/test_nav_dto.cpp index 5f5b72a..02cfc3e 100644 --- a/tests/data/test_nav_dto.cpp +++ b/tests/data/test_nav_dto.cpp @@ -26,3 +26,51 @@ TEST(NavDto, ParseWorkspacesMapsFieldsAndCurrentFlag) { EXPECT_TRUE(ws[0].isCurrent); EXPECT_FALSE(ws[1].isCurrent); } + +namespace { +QJsonObject objOf(const char* json) { + return QJsonDocument::fromJson(QByteArray(json)).object(); +} +} // namespace + +TEST(NavDto, ParseProjectsMapsCrsAndPaging) { + const auto data = objOf(R"({ + "hasNextPage": true, + "projectList": [ + {"id":"p1","projectName":"青海湖北岸","projectTypeName":"ERT", + "referenceCRSCode":"EPSG:4547","referenceCRSName":"CGCS2000","status":1} + ] + })"); + const auto page = dto::parseProjects(data); + EXPECT_TRUE(page.hasNextPage); + ASSERT_EQ(page.projects.size(), 1u); + EXPECT_EQ(page.projects[0].id, "p1"); + EXPECT_EQ(page.projects[0].name, "青海湖北岸"); + EXPECT_EQ(page.projects[0].typeName, "ERT"); + EXPECT_EQ(page.projects[0].crsCode, "EPSG:4547"); + EXPECT_EQ(page.projects[0].status, 1); +} + +TEST(NavDto, ParseStructNodesMapsParentAndType) { + const auto arr = arrOf(R"([ + {"id":"gs1","name":"工区1","parentId":"","type":1,"typeName":"GS","confCode":""}, + {"id":"tm1","name":"测线1","parentId":"gs1","type":2,"typeName":"TM","confCode":"ERT"} + ])"); + const auto ns = dto::parseStructNodes(arr); + ASSERT_EQ(ns.size(), 2u); + EXPECT_EQ(ns[0].id, "gs1"); + EXPECT_EQ(ns[1].parentId, "gs1"); + EXPECT_EQ(ns[1].confCode, "ERT"); + EXPECT_EQ(ns[1].type, 2); +} + +TEST(NavDto, ParseDatasetsMapsDdCodeToDdType) { + const auto arr = arrOf(R"([ + {"id":"ds1","name":"批次1","ddCode":"dd_section","typeName":"剖面"} + ])"); + const auto ds = dto::parseDatasets(arr); + ASSERT_EQ(ds.size(), 1u); + EXPECT_EQ(ds[0].id, "ds1"); + EXPECT_EQ(ds[0].name, "批次1"); + EXPECT_EQ(ds[0].ddType, "dd_section"); +}