Files
cannaiq/backend/dist/routes/settings.js
2025-11-28 19:45:44 -07:00

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;