112 lines
3.6 KiB
JavaScript
Executable File
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
|