52 lines
2.2 KiB
C++
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
|