119 lines
4.1 KiB
JavaScript
119 lines
4.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const express_1 = require("express");
|
|
const middleware_1 = require("../auth/middleware");
|
|
const migrate_1 = require("../db/migrate");
|
|
const scheduler_1 = require("../services/scheduler");
|
|
const router = (0, express_1.Router)();
|
|
router.use(middleware_1.authMiddleware);
|
|
// Get all settings
|
|
router.get('/', async (req, res) => {
|
|
try {
|
|
const result = await migrate_1.pool.query(`
|
|
SELECT key, value, description, updated_at
|
|
FROM settings
|
|
ORDER BY key
|
|
`);
|
|
res.json({ settings: result.rows });
|
|
}
|
|
catch (error) {
|
|
console.error('Error fetching settings:', error);
|
|
res.status(500).json({ error: 'Failed to fetch settings' });
|
|
}
|
|
});
|
|
// Get single setting
|
|
router.get('/:key', async (req, res) => {
|
|
try {
|
|
const { key } = req.params;
|
|
const result = await migrate_1.pool.query(`
|
|
SELECT key, value, description, updated_at
|
|
FROM settings
|
|
WHERE key = $1
|
|
`, [key]);
|
|
if (result.rows.length === 0) {
|
|
return res.status(404).json({ error: 'Setting not found' });
|
|
}
|
|
res.json({ setting: result.rows[0] });
|
|
}
|
|
catch (error) {
|
|
console.error('Error fetching setting:', error);
|
|
res.status(500).json({ error: 'Failed to fetch setting' });
|
|
}
|
|
});
|
|
// Update setting
|
|
router.put('/:key', (0, middleware_1.requireRole)('superadmin', 'admin'), async (req, res) => {
|
|
try {
|
|
const { key } = req.params;
|
|
const { value } = req.body;
|
|
if (value === undefined) {
|
|
return res.status(400).json({ error: 'Value required' });
|
|
}
|
|
const result = await migrate_1.pool.query(`
|
|
UPDATE settings
|
|
SET value = $1, updated_at = CURRENT_TIMESTAMP
|
|
WHERE key = $2
|
|
RETURNING *
|
|
`, [value, key]);
|
|
if (result.rows.length === 0) {
|
|
return res.status(404).json({ error: 'Setting not found' });
|
|
}
|
|
// Restart scheduler if scrape settings changed
|
|
if (key === 'scrape_interval_hours' || key === 'scrape_specials_time') {
|
|
console.log('Restarting scheduler due to setting change...');
|
|
await (0, scheduler_1.restartScheduler)();
|
|
}
|
|
res.json({ setting: result.rows[0] });
|
|
}
|
|
catch (error) {
|
|
console.error('Error updating setting:', error);
|
|
res.status(500).json({ error: 'Failed to update setting' });
|
|
}
|
|
});
|
|
// Update multiple settings at once
|
|
router.put('/', (0, middleware_1.requireRole)('superadmin', 'admin'), async (req, res) => {
|
|
try {
|
|
const { settings } = req.body;
|
|
if (!settings || !Array.isArray(settings)) {
|
|
return res.status(400).json({ error: 'Settings array required' });
|
|
}
|
|
const client = await migrate_1.pool.connect();
|
|
try {
|
|
await client.query('BEGIN');
|
|
const updated = [];
|
|
let needsSchedulerRestart = false;
|
|
for (const setting of settings) {
|
|
const result = await client.query(`
|
|
UPDATE settings
|
|
SET value = $1, updated_at = CURRENT_TIMESTAMP
|
|
WHERE key = $2
|
|
RETURNING *
|
|
`, [setting.value, setting.key]);
|
|
if (result.rows.length > 0) {
|
|
updated.push(result.rows[0]);
|
|
if (setting.key === 'scrape_interval_hours' || setting.key === 'scrape_specials_time') {
|
|
needsSchedulerRestart = true;
|
|
}
|
|
}
|
|
}
|
|
await client.query('COMMIT');
|
|
if (needsSchedulerRestart) {
|
|
console.log('Restarting scheduler due to setting changes...');
|
|
await (0, scheduler_1.restartScheduler)();
|
|
}
|
|
res.json({ settings: updated });
|
|
}
|
|
catch (error) {
|
|
await client.query('ROLLBACK');
|
|
throw error;
|
|
}
|
|
finally {
|
|
client.release();
|
|
}
|
|
}
|
|
catch (error) {
|
|
console.error('Error updating settings:', error);
|
|
res.status(500).json({ error: 'Failed to update settings' });
|
|
}
|
|
});
|
|
exports.default = router;
|