geopro/src/data/api/ApiDatasetRepository.cpp

52 lines
2.2 KiB
C++

#include "api/ApiDatasetRepository.hpp"
#include <stdexcept>
#include <QJsonObject>
#include <QString>
#include <QUrl>
#include "ApiClient.hpp"
#include "dto/DatasetChartDto.hpp"
namespace geopro::data {
namespace {
QString enc(const std::string& s) {
return QString::fromUtf8(QUrl::toPercentEncoding(QString::fromStdString(s)));
}
void must(const net::ApiResponse& r, const char* what) {
if (r.code != 200) throw std::runtime_error(std::string(what) + " failed: " +
(r.msg.isEmpty() ? r.rawError.toStdString() : r.msg.toStdString()));
}
geopro::core::ColorScale colorScale(net::ApiClient& api, const std::string& dsId, int type) {
QJsonObject body{{"dsObjectId", QString::fromStdString(dsId)}, {"businessCode", ""}, {"type", type}};
const net::ApiResponse r = api.postJson(QStringLiteral("/business/lvl/colorGradation/getDetail"), body);
must(r, "colorGradation");
return dto::parseColorBar(r.data);
}
} // namespace
ApiDatasetRepository::ApiDatasetRepository(net::ApiClient& api) : api_(api) {}
geopro::core::Grid ApiDatasetRepository::loadGrid(const std::string& dsId) {
const net::ApiResponse r = api_.get(
QStringLiteral("/business/dd/ert/inversion/rows/%1").arg(enc(dsId)));
must(r, "inversion/rows");
return dto::parseInversionGrid(r.data);
}
geopro::core::ScatterField ApiDatasetRepository::loadScatter(const std::string& dsId) {
const net::ApiResponse r = api_.get(
QStringLiteral("/business/dd/ert/inversion/getErtRawDataScatterGraph/%1").arg(enc(dsId)));
must(r, "scatterGraph");
return dto::parseScatterGraph(r.data);
}
geopro::core::ColorScale ApiDatasetRepository::loadColorScale(const std::string& dsId) {
return colorScale(api_, dsId, 2);
}
geopro::core::ColorScale ApiDatasetRepository::loadScatterColorScale(const std::string& dsId) {
return colorScale(api_, dsId, 1);
}
std::vector<geopro::core::Anomaly> ApiDatasetRepository::loadAnomalies(const std::string& dsId) {
const net::ApiResponse r = api_.get(
QStringLiteral("/business/exception/queryException/%1").arg(enc(dsId)));
must(r, "queryException");
return dto::parseDatasetAnomalies(r.data.value(QStringLiteral("value")).toArray());
}
} // namespace geopro::data