import { Router, Request, Response } from 'express'; import { asyncRoute } from '../asyncRoute'; import { getSettings, updateSettings, HOURS_SETTINGS, TEXT_SETTINGS, SettingName } from '../adminSettings'; const router = Router(); router.get('/', asyncRoute(async (_req: Request, res: Response) => { res.json(await getSettings()); })); router.put('/', asyncRoute(async (req: Request, res: Response) => { const values: Partial> = {}; // Only what was sent is validated and written, so a caller updating one field // does not have to echo the others back to avoid clobbering them. for (const name of HOURS_SETTINGS) { const raw = req.body[name]; if (raw === undefined) continue; const hours = parseFloat(raw); if (Number.isNaN(hours) || hours <= 0) { return res.status(400).json({ error: `${name} must be a positive number` }); } values[name] = hours; } for (const name of TEXT_SETTINGS) { const raw = req.body[name]; if (raw === undefined) continue; if (typeof raw !== 'string' || raw.trim() === '') { return res.status(400).json({ error: `${name} cannot be empty` }); } values[name] = raw; } await updateSettings(values); res.json(await getSettings()); })); export default router;