import { Router } from 'express'; import { requireAdmin } from '../middleware/auth'; import { ctiNameSchema as nameSchema, createTypeSchema, createItemSchema, } from '../../../shared/schemas/cti'; import * as ctiService from '../services/ctiService'; const router = Router(); // ── Categories ─────────────────────────────────────────────────────────────── router.get('/categories', async (_req, res) => { res.json(await ctiService.listCategories()); }); router.post('/categories', requireAdmin, async (req, res) => { const { name } = nameSchema.parse(req.body); res.status(201).json(await ctiService.createCategory(name)); }); router.put('/categories/:id', requireAdmin, async (req, res) => { const { name } = nameSchema.parse(req.body); res.json(await ctiService.updateCategory(req.params.id, name)); }); router.delete('/categories/:id', requireAdmin, async (req, res) => { await ctiService.deleteCategory(req.params.id); res.status(204).send(); }); // ── Types ──────────────────────────────────────────────────────────────────── router.get('/types', async (req, res) => { res.json(await ctiService.listTypes(req.query.categoryId as string | undefined)); }); router.post('/types', requireAdmin, async (req, res) => { const { name, categoryId } = createTypeSchema.parse(req.body); res.status(201).json(await ctiService.createType(name, categoryId)); }); router.put('/types/:id', requireAdmin, async (req, res) => { const { name } = nameSchema.parse(req.body); res.json(await ctiService.updateType(req.params.id, name)); }); router.delete('/types/:id', requireAdmin, async (req, res) => { await ctiService.deleteType(req.params.id); res.status(204).send(); }); // ── Items ──────────────────────────────────────────────────────────────────── router.get('/items', async (req, res) => { res.json(await ctiService.listItems(req.query.typeId as string | undefined)); }); router.post('/items', requireAdmin, async (req, res) => { const { name, typeId } = createItemSchema.parse(req.body); res.status(201).json(await ctiService.createItem(name, typeId)); }); router.put('/items/:id', requireAdmin, async (req, res) => { const { name } = nameSchema.parse(req.body); res.json(await ctiService.updateItem(req.params.id, name)); }); router.delete('/items/:id', requireAdmin, async (req, res) => { await ctiService.deleteItem(req.params.id); res.status(204).send(); }); export default router;