* @brief Toggle the @c virtual_ flag on the dataset identified by (groupId, datasetId). */
| 2358 | * @brief Toggle the @c virtual_ flag on the dataset identified by (groupId, datasetId). |
| 2359 | */ |
| 2360 | API::CommandResponse API::Handlers::ProjectHandler::datasetSetVirtual(const QString& id, |
| 2361 | const QJsonObject& params) |
| 2362 | { |
| 2363 | const QStringList required{ |
| 2364 | QString(Keys::GroupId), |
| 2365 | QString(Keys::DatasetId), |
| 2366 | QString(Keys::Virtual), |
| 2367 | }; |
| 2368 | |
| 2369 | for (const auto& key : required) |
| 2370 | if (!params.contains(key)) |
| 2371 | return CommandResponse::makeError( |
| 2372 | id, ErrorCode::MissingParam, QStringLiteral("Missing required parameter: %1").arg(key)); |
| 2373 | |
| 2374 | const int groupId = params.value(Keys::GroupId).toInt(); |
| 2375 | const int datasetId = params.value(Keys::DatasetId).toInt(); |
| 2376 | const bool isVirt = params.value(Keys::Virtual).toBool(); |
| 2377 | |
| 2378 | auto& pm = DataModel::ProjectModel::instance(); |
| 2379 | const auto& groups = pm.groups(); |
| 2380 | const auto git = std::find_if( |
| 2381 | groups.begin(), groups.end(), [groupId](const auto& g) { return g.groupId == groupId; }); |
| 2382 | |
| 2383 | if (git == groups.end()) |
| 2384 | return CommandResponse::makeError( |
| 2385 | id, ErrorCode::InvalidParam, QStringLiteral("Group id not found: %1").arg(groupId)); |
| 2386 | |
| 2387 | const auto& datasets = git->datasets; |
| 2388 | const auto dit = std::find_if(datasets.begin(), datasets.end(), [datasetId](const auto& d) { |
| 2389 | return d.datasetId == datasetId; |
| 2390 | }); |
| 2391 | |
| 2392 | if (dit == datasets.end()) |
| 2393 | return CommandResponse::makeError(id, |
| 2394 | ErrorCode::InvalidParam, |
| 2395 | QStringLiteral("Dataset id not found in group: %1/%2") |
| 2396 | .arg(QString::number(groupId), QString::number(datasetId))); |
| 2397 | |
| 2398 | DataModel::Dataset updated = *dit; |
| 2399 | updated.virtual_ = isVirt; |
| 2400 | pm.updateDataset(groupId, datasetId, updated, true); |
| 2401 | |
| 2402 | QJsonObject result; |
| 2403 | result[Keys::GroupId] = groupId; |
| 2404 | result[Keys::DatasetId] = datasetId; |
| 2405 | result[Keys::Virtual] = isVirt; |
| 2406 | result[QStringLiteral("updated")] = true; |
| 2407 | return CommandResponse::makeSuccess(id, result); |
| 2408 | } |
| 2409 | |
| 2410 | /** |
| 2411 | * @brief Set the per-dataset transform code (Lua or JS; language matches the dataset's owning |
nothing calls this directly
no test coverage detected