/
Krams
/
nodemon2
Обзор
Документация
Войти
/
Krams
/
nodemon2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/controllers/NodeStateController.js
105 строк
5 KB
Иван Новиков
update
07 май 2026, 15:04
07 май 2026, 15:04
b95c799
Код
Авторство
О чём код?
import { getNodeStateDefinitions, createNodeStateDefinition, updateNodeStateDefinitionById, } from '../services/NodeStateService.js'; export async function getNodeStatesController(req, res) { try { const items = await getNodeStateDefinitions(); res.json({ items }); } catch (e) { res.status(500).json({ error: 'Ошибка при получении состояний узлов' }); } } export async function createNodeStateController(req, res) { const name = String(req.body?.name || '').trim(); const description = String(req.body?.description || '').trim(); const color = typeof req.body?.color !== 'undefined' ? String(req.body.color || '').trim() : undefined; const textColor = typeof req.body?.textColor !== 'undefined' ? String(req.body.textColor || '').trim() : undefined; const borderColor = typeof req.body?.borderColor !== 'undefined' ? String(req.body.borderColor || '').trim() : undefined; const sortOrder = typeof req.body?.sortOrder !== 'undefined' ? req.body.sortOrder : undefined; const colorRegex = /^#([A-Fa-f0-9]{6})$/; if (!name) return res.status(400).json({ error: 'Поле name обязательно' }); if (!description) return res.status(400).json({ error: 'Поле description обязательно' }); if (typeof color !== 'undefined' && !colorRegex.test(color)) { return res.status(400).json({ error: 'Поле color должно быть HEX формата #RRGGBB' }); } if (typeof textColor !== 'undefined' && textColor !== '' && !colorRegex.test(textColor)) { return res.status(400).json({ error: 'Поле textColor должно быть HEX формата #RRGGBB или пустым (auto)' }); } if (typeof borderColor !== 'undefined' && !colorRegex.test(borderColor)) { return res.status(400).json({ error: 'Поле borderColor должно быть HEX формата #RRGGBB' }); } try { const item = await createNodeStateDefinition({ name, description, color, textColor, borderColor, sortOrder }); res.status(201).json(item); } catch (e) { if (String(e?.message || '').includes('UNIQUE')) { return res.status(409).json({ error: 'Состояние с таким названием уже существует' }); } res.status(500).json({ error: 'Ошибка при создании состояния узла' }); } } export async function updateNodeStateController(req, res) { const id = Number.parseInt(req.params.id, 10); if (!Number.isFinite(id)) return res.status(400).json({ error: 'Некорректный id' }); const descriptionRaw = typeof req.body?.description !== 'undefined' ? req.body.description : undefined; const colorRaw = typeof req.body?.color !== 'undefined' ? req.body.color : undefined; const textColorRaw = typeof req.body?.textColor !== 'undefined' ? req.body.textColor : undefined; const borderColorRaw = typeof req.body?.borderColor !== 'undefined' ? req.body.borderColor : undefined; const sortOrderRaw = typeof req.body?.sortOrder !== 'undefined' ? req.body.sortOrder : undefined; const hasAnyField = typeof descriptionRaw !== 'undefined' || typeof colorRaw !== 'undefined' || typeof textColorRaw !== 'undefined' || typeof borderColorRaw !== 'undefined' || typeof sortOrderRaw !== 'undefined'; if (!hasAnyField) return res.status(400).json({ error: 'Нет данных для обновления' }); const patch = {}; const colorRegex = /^#([A-Fa-f0-9]{6})$/; if (typeof descriptionRaw !== 'undefined') { const description = String(descriptionRaw || '').trim(); if (!description) return res.status(400).json({ error: 'Поле description не может быть пустым' }); patch.description = description; } if (typeof colorRaw !== 'undefined') { const color = String(colorRaw || '').trim(); if (!color) return res.status(400).json({ error: 'Поле color не может быть пустым' }); if (!colorRegex.test(color)) return res.status(400).json({ error: 'Поле color должно быть HEX формата #RRGGBB' }); patch.color = color; } if (typeof textColorRaw !== 'undefined') { const textColor = String(textColorRaw || '').trim(); if (textColor !== '' && !colorRegex.test(textColor)) { return res.status(400).json({ error: 'Поле textColor должно быть HEX формата #RRGGBB или пустым (auto)' }); } patch.textColor = textColor; } if (typeof borderColorRaw !== 'undefined') { const borderColor = String(borderColorRaw || '').trim(); if (!borderColor) return res.status(400).json({ error: 'Поле borderColor не может быть пустым' }); if (!colorRegex.test(borderColor)) { return res.status(400).json({ error: 'Поле borderColor должно быть HEX формата #RRGGBB' }); } patch.borderColor = borderColor; } if (typeof sortOrderRaw !== 'undefined') { patch.sortOrder = sortOrderRaw; } try { const item = await updateNodeStateDefinitionById(id, patch); if (!item) return res.status(404).json({ error: 'Состояние узла не найдено или нечего обновлять' }); res.json(item); } catch (e) { res.status(500).json({ error: 'Ошибка при обновлении состояния узла' }); } }