feat(data): NavDto parseProjects/parseStructNodes/parseDatasets

This commit is contained in:
gaozheng 2026-06-09 11:16:36 +08:00
parent bf67c01ac9
commit a32bd763da
2 changed files with 98 additions and 3 deletions

View File

@ -25,9 +25,56 @@ std::vector<Workspace> parseWorkspaces(const QJsonArray& arr) {
return out; return out;
} }
ProjectPage parseProjects(const QJsonObject&) { return {}; } ProjectPage parseProjects(const QJsonObject& data) {
std::vector<StructNode> parseStructNodes(const QJsonArray&) { return {}; } ProjectPage page;
std::vector<DsNode> parseDatasets(const QJsonArray&) { return {}; } page.hasNextPage = data.value(QStringLiteral("hasNextPage")).toBool();
const QJsonArray list = data.value(QStringLiteral("projectList")).toArray();
page.projects.reserve(static_cast<size_t>(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<StructNode> parseStructNodes(const QJsonArray& arr) {
std::vector<StructNode> out;
out.reserve(static_cast<size_t>(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<DsNode> parseDatasets(const QJsonArray& arr) {
std::vector<DsNode> out;
out.reserve(static_cast<size_t>(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<StructTreeNode> buildStructTree(const std::vector<StructNode>&) { return {}; } std::vector<StructTreeNode> buildStructTree(const std::vector<StructNode>&) { return {}; }
} // namespace geopro::data::dto } // namespace geopro::data::dto

View File

@ -26,3 +26,51 @@ TEST(NavDto, ParseWorkspacesMapsFieldsAndCurrentFlag) {
EXPECT_TRUE(ws[0].isCurrent); EXPECT_TRUE(ws[0].isCurrent);
EXPECT_FALSE(ws[1].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");
}