/
Krams
/
nodemon2
Обзор
Документация
Войти
/
Krams
/
nodemon2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/controllers/NodeFeatureController.js
107 строк
4 KB
Иван Новиков
postgresql update
04 май 2026, 09:46
04 май 2026, 09:46
27e975d
Код
Авторство
О чём код?
import { getNodeFeatures, createNodeFeature, updateNodeFeatureById, deleteNodeFeatureById, } from '../services/NodeFeatureService.js'; function normalizeFeaturePayload(body = {}) { const payload = {}; const colorRegex = /^#([A-Fa-f0-9]{6})$/; if (typeof body.name !== 'undefined') { payload.name = String(body.name || '').trim(); } if (typeof body.emoji !== 'undefined') { payload.emoji = String(body.emoji || '').trim(); } if (typeof body.color !== 'undefined') { const normalizedColor = String(body.color || '').trim(); payload.color = colorRegex.test(normalizedColor) ? normalizedColor : ''; } if (typeof body.sortOrder !== 'undefined') { payload.sortOrder = Number.parseInt(body.sortOrder, 10) || 0; } if (typeof body.isActive !== 'undefined') { payload.isActive = Boolean(body.isActive); } return payload; } export async function getNodeFeaturesController(req, res) { try { const features = await getNodeFeatures(); res.json({ items: features }); } catch (error) { res.status(500).json({ error: 'Ошибка при получении особенностей узлов' }); } } export async function createNodeFeatureController(req, res) { const payload = normalizeFeaturePayload(req.body); if (!payload.name || !payload.emoji || !payload.color) { return res.status(400).json({ error: 'Поля name, emoji и color обязательны' }); } try { const feature = await createNodeFeature(payload); res.status(201).json(feature); } catch (error) { if (String(error?.message || '').includes('UNIQUE')) { return res.status(409).json({ error: 'Особенность с таким названием уже существует' }); } res.status(500).json({ error: 'Ошибка при создании особенности узла' }); } } export async function updateNodeFeatureController(req, res) { const id = Number.parseInt(req.params.id, 10); const payload = normalizeFeaturePayload(req.body); if (!Number.isFinite(id)) { return res.status(400).json({ error: 'Некорректный id особенности' }); } if (Object.keys(payload).length === 0) { return res.status(400).json({ error: 'Нет данных для обновления' }); } if (typeof payload.name !== 'undefined' && !payload.name) { return res.status(400).json({ error: 'Поле name не может быть пустым' }); } if (typeof payload.emoji !== 'undefined' && !payload.emoji) { return res.status(400).json({ error: 'Поле emoji не может быть пустым' }); } if (typeof payload.color !== 'undefined' && !payload.color) { return res.status(400).json({ error: 'Поле color должно быть HEX-цветом формата #RRGGBB' }); } try { const feature = await updateNodeFeatureById(id, payload); if (!feature) { return res.status(404).json({ error: 'Особенность узла не найдена' }); } res.json(feature); } catch (error) { if (String(error?.message || '').includes('UNIQUE')) { return res.status(409).json({ error: 'Особенность с таким названием уже существует' }); } res.status(500).json({ error: 'Ошибка при обновлении особенности узла' }); } } export async function deleteNodeFeatureController(req, res) { const id = Number.parseInt(req.params.id, 10); if (!Number.isFinite(id)) { return res.status(400).json({ error: 'Некорректный id особенности' }); } try { const result = await deleteNodeFeatureById(id); if (result.changes === 0) { return res.status(404).json({ error: 'Особенность узла не найдена' }); } res.json(result); } catch (error) { res.status(500).json({ error: 'Ошибка при удалении особенности узла' }); } }