* @brief Returns the dataset's alarm bands as a JSON array. */
| 2512 | * @brief Returns the dataset's alarm bands as a JSON array. |
| 2513 | */ |
| 2514 | API::CommandResponse API::Handlers::ProjectHandler::datasetGetAlarmBands(const QString& id, |
| 2515 | const QJsonObject& params) |
| 2516 | { |
| 2517 | const QStringList required{QString(Keys::GroupId), QString(Keys::DatasetId)}; |
| 2518 | for (const auto& key : required) |
| 2519 | if (!params.contains(key)) |
| 2520 | return CommandResponse::makeError( |
| 2521 | id, ErrorCode::MissingParam, QStringLiteral("Missing required parameter: %1").arg(key)); |
| 2522 | |
| 2523 | const int groupId = params.value(Keys::GroupId).toInt(); |
| 2524 | const int datasetId = params.value(Keys::DatasetId).toInt(); |
| 2525 | |
| 2526 | auto& pm = DataModel::ProjectModel::instance(); |
| 2527 | const auto& groups = pm.groups(); |
| 2528 | const auto git = std::find_if( |
| 2529 | groups.begin(), groups.end(), [groupId](const auto& g) { return g.groupId == groupId; }); |
| 2530 | |
| 2531 | if (git == groups.end()) |
| 2532 | return CommandResponse::makeError( |
| 2533 | id, ErrorCode::InvalidParam, QStringLiteral("Group id not found: %1").arg(groupId)); |
| 2534 | |
| 2535 | const auto& datasets = git->datasets; |
| 2536 | const auto dit = std::find_if(datasets.begin(), datasets.end(), [datasetId](const auto& d) { |
| 2537 | return d.datasetId == datasetId; |
| 2538 | }); |
| 2539 | |
| 2540 | if (dit == datasets.end()) |
| 2541 | return CommandResponse::makeError(id, |
| 2542 | ErrorCode::InvalidParam, |
| 2543 | QStringLiteral("Dataset id not found in group: %1/%2") |
| 2544 | .arg(QString::number(groupId), QString::number(datasetId))); |
| 2545 | |
| 2546 | QJsonArray bands; |
| 2547 | for (const auto& b : dit->alarmBands) |
| 2548 | bands.append(DataModel::serialize(b)); |
| 2549 | |
| 2550 | QJsonObject result; |
| 2551 | result[Keys::GroupId] = groupId; |
| 2552 | result[Keys::DatasetId] = datasetId; |
| 2553 | result[Keys::AlarmBands] = bands; |
| 2554 | result[QStringLiteral("count")] = bands.size(); |
| 2555 | result[QStringLiteral("rangeMin")] = qMin(dit->wgtMin, dit->wgtMax); |
| 2556 | result[QStringLiteral("rangeMax")] = qMax(dit->wgtMin, dit->wgtMax); |
| 2557 | return CommandResponse::makeSuccess(id, result); |
| 2558 | } |
| 2559 | |
| 2560 | /** |
| 2561 | * @brief Atomic write of the full alarmBands array onto a dataset. |