/
h0tnanny
/
IotPlatform
Обзор
Документация
Войти
/
h0tnanny
/
IotPlatform
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
database/fix_compare_values.js
112 строк
5 KB
h0tnanny
исправление багов
07 фев 2026, 00:39
07 фев 2026, 00:39
a2638cd
Код
Авторство
О чём код?
/** * Фикс compareValue: обновляет workflow_nodes чтобы использовать имена переменных * вместо статических значений в compareValue * * Запуск: node database/fix_compare_values.js */ const { Pool } = require('pg'); const pool = new Pool({ host: 'localhost', port: 5433, database: 'iot_platform', user: 'postgres', password: 'postgres', }); async function fix() { const client = await pool.connect(); console.log('Фикс compareValue в workflow_nodes...\n'); // WF1: wf-temperature-alert — Проверка температуры: compareValue 30 → "threshold" const res1 = await client.query( `UPDATE workflow_nodes SET config = jsonb_set(config, '{compareValue}', '"threshold"') WHERE id = 'node-check-temp' AND workflow_id = 'wf-temperature-alert' RETURNING id` ); console.log(` node-check-temp: ${res1.rowCount ? 'обновлён' : 'не найден'}`); // WF2: wf-counter-loop — Цикл While: compareValue 5 → "maxCount" const res2 = await client.query( `UPDATE workflow_nodes SET config = jsonb_set(config, '{compareValue}', '"maxCount"') WHERE id = 'node-loop-start' AND workflow_id = 'wf-counter-loop' RETURNING id` ); console.log(` node-loop-start: ${res2.rowCount ? 'обновлён' : 'не найден'}`); // Обновляем все demo workflow из seed_full_demo (если уже были вставлены со статическими значениями) const demoFixes = [ // WF: Мониторинг качества воздуха ['air-check-co2', 'co2Threshold'], ['air-check-pm25', 'pm25Threshold'], // WF: Контроль вибрации ['vib-check-amp', 'ampThreshold'], ['vib-check-freq', 'freqThreshold'], // WF: Управление уровнем воды ['water-check-level', 'lowThreshold'], ['water-fill-loop', 'fillTarget'], ['water-check-high', 'highThreshold'], // WF: Мониторинг электропотребления ['energy-check-voltage', 'lowVoltThreshold'], ['energy-check-high-volt', 'highVoltThreshold'], ['energy-check-power', 'powerThreshold'], // WF: Пожарная безопасность ['fire-check-smoke', 'smokeThreshold'], ['fire-check-co', 'coThreshold'], ]; for (const [nodeId, varName] of demoFixes) { const res = await client.query( `UPDATE workflow_nodes SET config = jsonb_set(config, '{compareValue}', $1::jsonb) WHERE id = $2 RETURNING id`, [JSON.stringify(varName), nodeId] ); console.log(` ${nodeId} → ${varName}: ${res.rowCount ? 'обновлён' : 'не найден (ок, ещё не создан)'}`); } // Добавляем переменные-пороги для WF1 и WF2 (если ещё нет) // WF1: threshold уже есть (см. test-data.sql строка 23) // WF2: maxCount уже есть (см. test-data.sql строка 57) // Добавляем переменные-пороги для demo workflow (если seed_full_demo уже запускался со старыми данными) const thresholdVars = [ ['wf-air-monitor', 'co2Threshold', 'Порог CO2 (ppm)', 'Number', '1000'], ['wf-air-monitor', 'pm25Threshold', 'Порог PM2.5 (мкг/м³)', 'Double', '35'], ['wf-vibration-control', 'ampThreshold', 'Порог амплитуды (мм)', 'Double', '0.3'], ['wf-vibration-control', 'freqThreshold', 'Порог частоты (Гц)', 'Number', '150'], ['wf-water-control', 'lowThreshold', 'Нижний порог (%)', 'Double', '30'], ['wf-water-control', 'fillTarget', 'Цель наполнения (%)', 'Double', '80'], ['wf-water-control', 'highThreshold', 'Верхний порог (%)', 'Double', '90'], ['wf-energy-monitor', 'lowVoltThreshold', 'Мин. напряжение (В)', 'Double', '200'], ['wf-energy-monitor', 'highVoltThreshold', 'Макс. напряжение (В)', 'Double', '245'], ['wf-energy-monitor', 'powerThreshold', 'Порог мощности (кВт)', 'Double', '3.0'], ['wf-fire-safety', 'smokeThreshold', 'Порог задымления (%)', 'Double', '3'], ['wf-fire-safety', 'coThreshold', 'Порог CO (ppm)', 'Number', '10'], ]; let added = 0; for (const [wfId, name, desc, type, value] of thresholdVars) { const exists = await client.query( `SELECT 1 FROM workflow_variables WHERE workflow_id = $1 AND name = $2`, [wfId, name] ); if (exists.rowCount === 0) { await client.query( `INSERT INTO workflow_variables (workflow_id, name, description, type, value) VALUES ($1, $2, $3, $4, $5)`, [wfId, name, desc, type, value] ); added++; } } console.log(`\n Добавлено переменных-порогов: ${added} (остальные уже существовали)`); client.release(); await pool.end(); console.log('\nГотово!'); } fix().catch(err => { console.error('Ошибка:', err); process.exit(1); });