#include "api/ApiDatasetRepository.hpp" #include #include #include #include #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 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