103 lines
2.8 KiB
TypeScript
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;
|