/
Krams
/
nodemon2
Обзор
Документация
Войти
/
Krams
/
nodemon2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/services/MapNoticeService.js
139 строк
4 KB
Иван Новиков
final
25 май 2026, 17:46
25 май 2026, 17:46
2c76ffd
Код
Авторство
О чём код?
import db from '../database.js'; const MAP_NOTICE_ROW_KEY = 'main'; const DEFAULT_NOTICE_THEME = 'warning'; function asDisplayHidden(rowValue) { return rowValue === true || rowValue === 1 || rowValue === '1' || String(rowValue).toLowerCase() === 'true'; } function ensureMapNoticeTable() { return new Promise((resolve, reject) => { db.run( `CREATE TABLE IF NOT EXISTS map_notice ( key TEXT PRIMARY KEY, notice_id TEXT NOT NULL, eyebrow TEXT, title TEXT NOT NULL, body TEXT NOT NULL, theme TEXT NOT NULL DEFAULT 'warning', display_hidden INTEGER NOT NULL DEFAULT 0, updated_at INTEGER NOT NULL )`, [], (err) => { if (err) return reject(err); resolve(); } ); }); } function ensureThemeColumn() { return db.hasColumn('map_notice', 'theme').then((hasThemeColumn) => { if (hasThemeColumn) return undefined; return new Promise((resolve, reject) => { db.run( `ALTER TABLE map_notice ADD COLUMN theme TEXT NOT NULL DEFAULT 'warning'`, [], (alterError) => { if (alterError) return reject(alterError); resolve(); } ); }); }); } function ensureDisplayHiddenColumn() { return db.hasColumn('map_notice', 'display_hidden').then((hasCol) => { if (hasCol) return undefined; return new Promise((resolve, reject) => { db.run( `ALTER TABLE map_notice ADD COLUMN display_hidden INTEGER NOT NULL DEFAULT 0`, [], (alterError) => { if (alterError) return reject(alterError); resolve(); } ); }); }); } function mapRowToNotice(row) { if (!row) return null; return { id: row.notice_id, eyebrow: row.eyebrow || '', title: row.title, body: row.body, theme: row.theme || DEFAULT_NOTICE_THEME, display_hidden: asDisplayHidden(row.display_hidden), updatedAt: row.updated_at, }; } export async function getMapNotice() { await ensureMapNoticeTable(); await ensureThemeColumn(); await ensureDisplayHiddenColumn(); return new Promise((resolve, reject) => { db.get( `SELECT key, notice_id, eyebrow, title, body, theme, display_hidden, updated_at FROM map_notice WHERE key = ?`, [MAP_NOTICE_ROW_KEY], (err, row) => { if (err) return reject(err); resolve(mapRowToNotice(row)); } ); }); } export async function saveMapNotice({ id, eyebrow, title, body, theme, display_hidden: displayHidden }) { await ensureMapNoticeTable(); await ensureThemeColumn(); await ensureDisplayHiddenColumn(); const updatedAt = Math.floor(Date.now() / 1000); const normalizedTheme = theme || DEFAULT_NOTICE_THEME; const hiddenInt = displayHidden === true || displayHidden === 1 || displayHidden === '1' ? 1 : 0; return new Promise((resolve, reject) => { db.run( `INSERT INTO map_notice (key, notice_id, eyebrow, title, body, theme, display_hidden, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(key) DO UPDATE SET notice_id = excluded.notice_id, eyebrow = excluded.eyebrow, title = excluded.title, body = excluded.body, theme = excluded.theme, display_hidden = excluded.display_hidden, updated_at = excluded.updated_at`, [MAP_NOTICE_ROW_KEY, id, eyebrow, title, body, normalizedTheme, hiddenInt, updatedAt], function (err) { if (err) return reject(err); resolve({ id, eyebrow, title, body, theme: normalizedTheme, display_hidden: hiddenInt === 1, updatedAt, }); } ); }); } export async function initMapNoticeStorage() { await ensureMapNoticeTable(); await ensureThemeColumn(); await ensureDisplayHiddenColumn(); }