MyKindlebox/mykindlebox/server/routes/settings.ts

41 lines
1.1 KiB
TypeScript

import { Router } from 'express';
import { eq } from 'drizzle-orm';
import { db } from '../db/client';
import { settings } from '../db/schema';
const router = Router();
const ALLOWED_KEYS = ['rabbitry_name', 'weight_unit', 'kit_prefix', 'theme', 'default_breed'] as const;
router.get('/', (req, res) => {
const rows = db.select().from(settings).all();
const result: Record<string, string | null> = {};
for (const row of rows) {
result[row.key] = row.value;
}
res.json(result);
});
router.patch('/', (req, res) => {
const keys = Object.keys(req.body);
const unknownKey = keys.find((key) => !ALLOWED_KEYS.includes(key as (typeof ALLOWED_KEYS)[number]));
if (unknownKey) {
res.status(400).json({ error: `Unknown setting: ${unknownKey}` });
return;
}
for (const key of keys) {
db.update(settings).set({ value: req.body[key] }).where(eq(settings.key, key)).run();
}
const rows = db.select().from(settings).all();
const result: Record<string, string | null> = {};
for (const row of rows) {
result[row.key] = row.value;
}
res.json(result);
});
export default router;