fix: сценарии — перерендер после поллинга + индекс отдельно (v1.2.38)

Баг 1: страница сценариев зависала после завершения
  — scenario-list.js: добавлен loadScenarios() после поллинга

Баг 2: история могла быть пустой (ON CONFLICT без индекса)
  — init_db.py: CREATE UNIQUE INDEX отдельным cur.execute()
    (мультистейтмент SQL в psycopg2 ненадёжен)
This commit is contained in:
2026-08-03 10:09:17 +04:00
parent 539cfd7b1a
commit 38148516e6
3 changed files with 7 additions and 1 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.37"
VERSION = "1.2.38"
# Flask-приложение с Jinja2-шаблонами из папки templates/
app = Flask(__name__, template_folder="templates", static_folder="static")
+5
View File
@@ -218,6 +218,11 @@ def init_db():
cur.execute(SCHEMA_SQL)
cur.execute(MIGRATION_SQL)
cur.execute(SCENARIO_RUNS_SQL)
# Индекс для UPSERT в save_run — отдельным запросом для надёжности
# (мультистейтмент SQL в psycopg2 может выполнить не все операторы)
cur.execute("CREATE UNIQUE INDEX IF NOT EXISTS idx_runs_op_uid ON runs (op_uid) WHERE op_uid IS NOT NULL")
conn.commit()
cur.close()
print("[DB] Schema initialized", flush=True)
+1
View File
@@ -218,6 +218,7 @@ async function runScenario(defId){
busy=false;
await refreshInstances(); // обновить список инстансов
if(historyOpen) await loadHistory(); // обновить историю
await loadScenarios(); // перерендерить список (кнопки)
}
}catch(e){
_scenarioPollErrors++;