settings.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Router, Request, Response } from 'express';
  2. import { prisma } from '../lib/prisma';
  3. import { authMiddleware } from '../lib/auth';
  4. const router = Router();
  5. router.use(authMiddleware);
  6. const SITE_SETTINGS_KEY = 'registration_enabled';
  7. // GET /api/settings/registration — admin only
  8. router.get('/registration', async (req: Request, res: Response) => {
  9. try {
  10. if (req.user!.globalRole !== 'ADMIN') {
  11. res.status(403).json({ error: 'Admin only' });
  12. return;
  13. }
  14. const setting = await prisma.siteSetting.findUnique({ where: { name: SITE_SETTINGS_KEY } });
  15. res.json({ enabled: setting?.value !== 'false' });
  16. } catch (err) {
  17. console.error('Get registration setting error:', err);
  18. res.status(500).json({ error: 'Internal server error' });
  19. }
  20. });
  21. // PUT /api/settings/registration — admin only
  22. router.put('/registration', async (req: Request, res: Response) => {
  23. try {
  24. if (req.user!.globalRole !== 'ADMIN') {
  25. res.status(403).json({ error: 'Admin only' });
  26. return;
  27. }
  28. const { enabled } = req.body;
  29. if (typeof enabled !== 'boolean') {
  30. res.status(400).json({ error: 'enabled must be a boolean' });
  31. return;
  32. }
  33. await prisma.siteSetting.upsert({
  34. where: { name: SITE_SETTINGS_KEY },
  35. create: { name: SITE_SETTINGS_KEY, value: String(enabled) },
  36. update: { value: String(enabled) },
  37. });
  38. res.json({ enabled });
  39. } catch (err) {
  40. console.error('Update registration setting error:', err);
  41. res.status(500).json({ error: 'Internal server error' });
  42. }
  43. });
  44. export default router;