← back to Dw Boardroom Governance
src/api/routes/delegations.ts
78 lines
import { Router, Request, Response } from 'express';
import * as delegationEngine from '../../engine/delegationEngine';
import { suggestDelegate } from '../../agents/vp';
const router = Router();
// GET /api/delegations — list delegations
router.get('/', async (req: Request, res: Response) => {
try {
const status = req.query.status as string;
const delegations = await delegationEngine.listDelegations(status);
res.json(delegations);
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
// POST /api/delegations — create delegation
router.post('/', async (req: Request, res: Response) => {
try {
const contract = await delegationEngine.createDelegation({
decisionId: req.body.decisionId,
owner: req.body.owner,
delegate: req.body.delegate,
autonomyLevel: req.body.autonomyLevel,
metric: req.body.metric,
checkpointDate: req.body.checkpointDate,
routingKeywords: req.body.routingKeywords,
});
res.json(contract);
} catch (err: any) {
res.status(400).json({ error: err.message });
}
});
// POST /api/delegations/suggest — get routing suggestion
router.post('/suggest', async (req: Request, res: Response) => {
try {
const suggestion = suggestDelegate(req.body.description || '');
res.json(suggestion);
} catch (err: any) {
res.status(400).json({ error: err.message });
}
});
// GET /api/delegations/:id — detail
router.get('/:id', async (req: Request, res: Response) => {
try {
const contract = await delegationEngine.getDelegation(req.params.id);
if (!contract) return res.status(404).json({ error: 'Delegation not found' });
res.json(contract);
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
// POST /api/delegations/:id/complete
router.post('/:id/complete', async (req: Request, res: Response) => {
try {
const contract = await delegationEngine.completeDelegation(req.params.id);
res.json(contract);
} catch (err: any) {
res.status(400).json({ error: err.message });
}
});
// POST /api/delegations/:id/revoke
router.post('/:id/revoke', async (req: Request, res: Response) => {
try {
const contract = await delegationEngine.revokeDelegation(req.params.id);
res.json(contract);
} catch (err: any) {
res.status(400).json({ error: err.message });
}
});
export default router;