← back to Dw Boardroom V2
src/api/routes/agenda.ts
66 lines
// ═══════════════════════════════════════════════
// DW Boardroom V2 — Agenda Routes
// ═══════════════════════════════════════════════
import { Router } from 'express';
import * as engine from '../../engine/meetingEngine';
import { validateAgenda } from '../../agents/president';
const router = Router();
// GET /api/agenda/:meetingId — get items
router.get('/:meetingId', (req, res) => {
try {
const items = engine.getAgendaItems(req.params.meetingId);
res.json(items);
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
// POST /api/agenda/:meetingId — add item
router.post('/:meetingId', (req, res) => {
try {
const { topic, recommendation, decisionType, owner } = req.body;
if (!topic) {
res.status(400).json({ error: 'Topic is required' });
return;
}
const validation = validateAgenda([{ topic, decision_type: decisionType }]);
if (!validation.valid) {
res.status(400).json({ error: validation.errors.join('; ') });
return;
}
const item = engine.addAgendaItem(req.params.meetingId, topic, recommendation, decisionType, owner);
res.json(item);
} catch (err: any) {
res.status(400).json({ error: err.message });
}
});
// PUT /api/agenda/:meetingId/:itemId — update item
router.put('/:meetingId/:itemId', (req, res) => {
try {
const itemId = parseInt(req.params.itemId);
const item = engine.updateAgendaItem(req.params.meetingId, itemId, req.body);
res.json(item);
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
// DELETE /api/agenda/:meetingId/:itemId — delete item
router.delete('/:meetingId/:itemId', (req, res) => {
try {
const itemId = parseInt(req.params.itemId);
engine.deleteAgendaItem(req.params.meetingId, itemId);
res.json({ deleted: true });
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
export default router;