import { Router } from 'express'; import { getAllLayouts, getLayoutById, createLayout, updateLayout, deleteLayout, addElement, updateElement, deleteElement, } from '../../modules/display/layout-manager'; const router = Router(); // GET /api/layouts router.get('/', (_req, res): void => { try { res.json(getAllLayouts()); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // GET /api/layouts/:id router.get('/:id', (req, res): void => { try { const layout = getLayoutById(parseInt(req.params.id)); if (!layout) { res.status(404).json({ error: 'Layout not found' }); return; } res.json(layout); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // POST /api/layouts router.post('/', (req, res): void => { try { if (!req.body.name) { res.status(400).json({ error: 'name is required' }); return; } res.status(201).json(createLayout(req.body)); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // PUT /api/layouts/:id router.put('/:id', (req, res): void => { try { const layout = updateLayout(parseInt(req.params.id), req.body); if (!layout) { res.status(404).json({ error: 'Layout not found' }); return; } res.json(layout); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // DELETE /api/layouts/:id router.delete('/:id', (req, res): void => { try { const deleted = deleteLayout(parseInt(req.params.id)); if (!deleted) { res.status(404).json({ error: 'Layout not found' }); return; } res.status(204).send(); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // ---- Elements ---- // POST /api/layouts/:layoutId/elements router.post('/:layoutId/elements', (req, res): void => { try { const layoutId = parseInt(req.params.layoutId); if (!req.body.type) { res.status(400).json({ error: 'type is required' }); return; } res.status(201).json(addElement(layoutId, req.body)); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // PUT /api/layouts/:layoutId/elements/:id router.put('/:layoutId/elements/:id', (req, res): void => { try { const el = updateElement(parseInt(req.params.id), req.body); if (!el) { res.status(404).json({ error: 'Element not found' }); return; } res.json(el); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); // DELETE /api/layouts/:layoutId/elements/:id router.delete('/:layoutId/elements/:id', (req, res): void => { try { const deleted = deleteElement(parseInt(req.params.id)); if (!deleted) { res.status(404).json({ error: 'Element not found' }); return; } res.status(204).send(); } catch (err) { res.status(500).json({ error: (err as Error).message }); } }); export default router;