45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
import pool from '../db/index.js';
|
|
import { run } from '../db/index.js';
|
|
|
|
function parseSettingValue(raw) {
|
|
if (typeof raw !== 'string') return raw;
|
|
if (/^-?\d+(\.\d+)?$/.test(raw)) return Number(raw);
|
|
if (raw === 'true') return true;
|
|
if (raw === 'false') return false;
|
|
return raw;
|
|
}
|
|
|
|
export async function getSettings(req, res) {
|
|
try {
|
|
const { rows } = await pool.query('SELECT key, value FROM settings');
|
|
const obj = {};
|
|
for (const r of rows) {
|
|
obj[r.key] = parseSettingValue(r.value);
|
|
}
|
|
res.json(obj);
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
}
|
|
|
|
export async function updateSettings(req, res) {
|
|
try {
|
|
const updates = req.body || {};
|
|
for (const [key, value] of Object.entries(updates)) {
|
|
await run(
|
|
'INSERT INTO settings (key, value) VALUES ($1, $2) ON CONFLICT(key) DO UPDATE SET value = excluded.value',
|
|
[key, String(value)]
|
|
);
|
|
}
|
|
// Return updated settings
|
|
const { rows } = await pool.query('SELECT key, value FROM settings');
|
|
const obj = {};
|
|
for (const r of rows) {
|
|
obj[r.key] = parseSettingValue(r.value);
|
|
}
|
|
res.json(obj);
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
}
|