2026-04-06 12:56:35 +02:00

103 lines
2.8 KiB
TypeScript

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;