"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;