Files
geo/backend/dist/routes/settings.js
2026-02-04 00:11:19 +05:00

112 lines
3.6 KiB
JavaScript
Executable File

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = require("express");
const client_1 = require("@prisma/client");
const router = (0, express_1.Router)();
const prisma = new client_1.PrismaClient();
// Get all settings
router.get('/', async (req, res) => {
try {
const { category } = req.query;
const where = {};
if (category) {
where.category = String(category);
}
const settings = await prisma.setting.findMany({
where,
orderBy: [{ category: 'asc' }, { key: 'asc' }],
});
// Convert to key-value object grouped by category
const grouped = settings.reduce((acc, setting) => {
if (!acc[setting.category]) {
acc[setting.category] = {};
}
let value = setting.value;
if (setting.type === 'number') {
value = parseFloat(setting.value);
}
else if (setting.type === 'boolean') {
value = setting.value === 'true';
}
else if (setting.type === 'json') {
try {
value = JSON.parse(setting.value);
}
catch { }
}
acc[setting.category][setting.key] = {
value,
label: setting.label,
type: setting.type,
};
return acc;
}, {});
res.json(grouped);
}
catch (error) {
res.status(500).json({ error: 'Failed to fetch settings' });
}
});
// Get setting by key
router.get('/:key', async (req, res) => {
try {
const setting = await prisma.setting.findUnique({
where: { key: req.params.key },
});
if (!setting) {
return res.status(404).json({ error: 'Setting not found' });
}
res.json(setting);
}
catch (error) {
res.status(500).json({ error: 'Failed to fetch setting' });
}
});
// Update setting
router.put('/:key', async (req, res) => {
try {
const { value } = req.body;
const setting = await prisma.setting.update({
where: { key: req.params.key },
data: {
value: typeof value === 'object' ? JSON.stringify(value) : String(value),
},
});
res.json(setting);
}
catch (error) {
res.status(400).json({ error: 'Failed to update setting' });
}
});
// Create or update multiple settings
router.post('/batch', async (req, res) => {
try {
const { settings } = req.body;
const results = [];
for (const [key, data] of Object.entries(settings)) {
const result = await prisma.setting.upsert({
where: { key },
update: {
value: typeof data.value === 'object' ? JSON.stringify(data.value) : String(data.value),
label: data.label,
type: data.type,
category: data.category,
},
create: {
key,
value: typeof data.value === 'object' ? JSON.stringify(data.value) : String(data.value),
label: data.label || key,
type: data.type || 'string',
category: data.category || 'general',
},
});
results.push(result);
}
res.json(results);
}
catch (error) {
res.status(400).json({ error: 'Failed to update settings' });
}
});
exports.default = router;
//# sourceMappingURL=settings.js.map