/
Krams
/
nodemon
Обзор
Документация
Войти
/
Krams
/
nodemon
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/services/NodeListService.js
176 строк
5 KB
Krams
first_commit
08 июн 2025, 12:17
08 июн 2025, 12:17
25d7395
Код
Авторство
О чём код?
import db from '../database.js'; // Создать новый список узлов export async function createNodeList(name, nodeIds, worker_id = null) { return new Promise((resolve, reject) => { const unixTime = Math.floor(Date.now() / 1000); // Текущее время в секундах db.run( `INSERT INTO node_list (name, worker_id, date) VALUES (?, ?, ?)`, [name, worker_id, unixTime], function (err) { if (err) return reject(err); const listId = this.lastID; if (!nodeIds || nodeIds.length === 0) { return resolve({ listId }); } const placeholders = nodeIds.map(() => '(?, ?)').join(','); const values = []; nodeIds.forEach((nodeId) => { values.push(listId, nodeId); }); db.run( `INSERT INTO node_list_items (list_id, node_id) VALUES ${placeholders}`, values, function (err2) { if (err2) return reject(err2); resolve({ listId }); } ); } ); }); } // Удалить список узлов export async function deleteNodeList(listId) { return new Promise((resolve, reject) => { // Удаляем сначала элементы списка db.run( `DELETE FROM node_list_items WHERE list_id = ?`, [listId], (err) => { if (err) return reject(err); // Затем удаляем сам список db.run( `DELETE FROM node_list WHERE id = ?`, [listId], function (err2) { if (err2) return reject(err2); resolve({ changes: this.changes }); } ); } ); }); } // Обновить список узлов export async function updateNodeList(listId, { name, nodes }) { return new Promise((resolve, reject) => { db.serialize(() => { // Обновляем имя списка, если пришло if (name) { db.run( `UPDATE node_list SET name = ? WHERE id = ?`, [name, listId], function (err) { if (err) return reject(err); } ); } // Удаляем все старые связи узлов с этим списком db.run( `DELETE FROM node_list_items WHERE list_id = ?`, [listId], function (err) { if (err) return reject(err); // Если новых узлов нет, завершаем if (!nodes || nodes.length === 0) { return resolve({ success: true }); } // Добавляем новые связи const placeholders = nodes.map(() => '(?, ?)').join(','); const values = []; nodes.forEach((nodeId) => { values.push(listId, nodeId); }); db.run( `INSERT INTO node_list_items (list_id, node_id) VALUES ${placeholders}`, values, function (err) { if (err) return reject(err); resolve({ success: true }); } ); } ); }); }); } // Получить список узлов по ID export async function getNodeListById(listId) { return new Promise((resolve, reject) => { db.get( `SELECT * FROM node_list WHERE id = ?`, [listId], (err, list) => { if (err) return reject(err); if (!list) return reject(new Error('List not found')); db.all( `SELECT node_id FROM node_list_items WHERE list_id = ?`, [listId], (err2, rows) => { if (err2) return reject(err2); const nodeIds = rows.map(row => row.node_id); resolve({ ...list, nodeIds }); } ); } ); }); } // Получить все списки узлов с узлами и работником export async function getAllNodeListsWithNodes() { return new Promise((resolve, reject) => { db.all(`SELECT * FROM node_list`, [], (err, lists) => { if (err) return reject(err); if (!lists || lists.length === 0) return resolve([]); const results = []; let processed = 0; lists.forEach((list) => { db.get(`SELECT * FROM user WHERE id = ?`, [list.worker_id], (errUser, worker) => { if (errUser) return reject(errUser); db.all( `SELECT n.* FROM node_list_items li JOIN node n ON li.node_id = n.id WHERE li.list_id = ?`, [list.id], (errNodes, nodes) => { if (errNodes) return reject(errNodes); results.push({ ...list, worker: worker || null, nodes, }); processed++; if (processed === lists.length) { resolve(results.sort((a, b) => b.date - a.date)); } } ); }); }); }); }); }