This commit is contained in:
root
2025-10-10 09:36:07 +00:00
parent b6579f511d
commit 14b1459767
8 changed files with 2047 additions and 254 deletions
+71
View File
@@ -0,0 +1,71 @@
import { db } from './index.js';
const CREATE_TABLE_SQL = `
CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
)
`;
db.prepare(CREATE_TABLE_SQL).run();
const getSettingStmt = db.prepare('SELECT key, value, updated_at FROM settings WHERE key = ?');
const setSettingStmt = db.prepare(`
INSERT INTO settings (key, value, updated_at)
VALUES (@key, @value, CURRENT_TIMESTAMP)
ON CONFLICT(key) DO UPDATE SET
value = excluded.value,
updated_at = CURRENT_TIMESTAMP
`);
const deleteSettingStmt = db.prepare('DELETE FROM settings WHERE key = ?');
export function getSetting(key) {
try {
return getSettingStmt.get(key) || null;
} catch (err) {
console.error(`❌ [Settings] Fehler beim Lesen des Settings "${key}":`, err.message);
return null;
}
}
export function setSetting(key, value) {
try {
setSettingStmt.run({ key, value });
return true;
} catch (err) {
console.error(`❌ [Settings] Fehler beim Speichern des Settings "${key}":`, err.message);
return false;
}
}
export function deleteSetting(key) {
try {
deleteSettingStmt.run(key);
return true;
} catch (err) {
console.error(`❌ [Settings] Fehler beim Löschen des Settings "${key}":`, err.message);
return false;
}
}
export function getJsonSetting(key, defaultValue = null) {
const row = getSetting(key);
if (!row || row.value === null || row.value === undefined) return defaultValue;
try {
return JSON.parse(row.value);
} catch (err) {
console.warn(`⚠️ [Settings] Konnte JSON für Setting "${key}" nicht parsen:`, err.message);
return defaultValue;
}
}
export function setJsonSetting(key, value) {
try {
const payload = value === undefined ? null : JSON.stringify(value);
return setSetting(key, payload);
} catch (err) {
console.error(`❌ [Settings] Fehler beim Serialisieren von Setting "${key}":`, err.message);
return false;
}
}
+910 -240
View File
File diff suppressed because it is too large Load Diff
+63
View File
@@ -0,0 +1,63 @@
import { getJsonSetting, setJsonSetting } from '../db/settings.js';
const MAINTENANCE_KEY = 'maintenance_mode';
const DEFAULT_STATE = {
active: false,
message: null,
activatedAt: null,
updatedAt: null,
extra: null
};
let maintenanceState = loadState();
function loadState() {
const saved = getJsonSetting(MAINTENANCE_KEY, null);
if (!saved) {
const initial = { ...DEFAULT_STATE, updatedAt: new Date().toISOString() };
setJsonSetting(MAINTENANCE_KEY, initial);
return initial;
}
return {
...DEFAULT_STATE,
...saved
};
}
function persistState(state) {
maintenanceState = {
...DEFAULT_STATE,
...state,
updatedAt: new Date().toISOString()
};
setJsonSetting(MAINTENANCE_KEY, maintenanceState);
return maintenanceState;
}
export function getMaintenanceState() {
return { ...maintenanceState };
}
export function isMaintenanceModeActive() {
return Boolean(maintenanceState?.active);
}
export function activateMaintenanceMode({ message = null, extra = null } = {}) {
const now = new Date().toISOString();
return persistState({
active: true,
message,
extra,
activatedAt: now
});
}
export function deactivateMaintenanceMode({ message = null } = {}) {
return persistState({
active: false,
message,
extra: null,
activatedAt: null
});
}