← 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;