fix: нельзя сохранить сценарий — валидация + svcId для instance_ref (v1.2.47)

Баг 1: collectFormSteps не вычислял svcId для instance_ref
  (output-ссылка не резолвилась в service_id)
Баг 2: валидация требовала service_id для ВСЕХ шагов,
  включая не-create с instance_ref/instance_uid
This commit is contained in:
“Naeel”
2026-08-04 15:22:57 +04:00
parent 4937c9ea8e
commit 43bd51e715
2 changed files with 19 additions and 4 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ from routes.api_scenario_defs import bp_defs as api_scenario_defs_bp
# Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода.
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
VERSION = "1.2.46"
VERSION = "1.2.47"
# Flask-приложение с Jinja2-шаблонами из папки templates/
app = Flask(__name__, template_folder="templates", static_folder="static")
+18 -3
View File
@@ -501,7 +501,14 @@ function collectFormSteps() {
svcId = cloud.serviceId;
s.instance_uid = ref; // облачный UUID
} else {
s.instance_ref = ref; // output-ссылка
// output-ссылка — ищем service_id в предыдущих create-шагах
s.instance_ref = ref;
for (let j = 0; j < idx; j++) {
if (st.steps[j].output === ref) {
svcId = st.steps[j].service_id;
break;
}
}
}
}
}
@@ -541,8 +548,16 @@ async function saveScenario() {
if (!name) { alert('Введите название'); return; }
if (!steps.length) { alert('Добавьте хотя бы один шаг'); return; }
for (let i = 0; i < steps.length; i++) {
if (!steps[i].service_id) { alert('Шаг ' + (i+1) + ': выберите сервис или инстанс'); return; }
if (!steps[i].operation) { alert('Шаг ' + (i+1) + ': выберите операцию'); return; }
const s = steps[i];
if (!s.operation) { alert('Шаг ' + (i+1) + ': выберите операцию'); return; }
// CREATE: нужен service_id. Не-CREATE: service_id ИЛИ instance_ref/instance_uid
if (s.operation === 'create') {
if (!s.service_id) { alert('Шаг ' + (i+1) + ': выберите сервис'); return; }
} else {
if (!s.service_id && !s.instance_ref && !s.instance_uid) {
alert('Шаг ' + (i+1) + ': выберите инстанс (из create-шага или облака)'); return;
}
}
}
const st = scenarioEditorState;