← back to Dw Boardroom V2
src/api/routes/voice.ts
52 lines
// ═══════════════════════════════════════════════
// DW Boardroom V2 — Voice / TTS Routes
// ═══════════════════════════════════════════════
import { Router } from 'express';
import { run, query } from '../../db/sqlite';
import { getVoice } from '../../agents/voices';
const router = Router();
// GET /api/voice/config — TTS settings
router.get('/config', (req, res) => {
try {
const rows = query<{ key: string; value: string }>('SELECT key, value FROM br2_voice_config');
const config: Record<string, any> = {};
for (const row of rows) {
if (row.value === 'true') config[row.key] = true;
else if (row.value === 'false') config[row.key] = false;
else if (!isNaN(Number(row.value))) config[row.key] = Number(row.value);
else config[row.key] = row.value;
}
res.json(config);
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
// POST /api/voice/config — update TTS settings
router.post('/config', (req, res) => {
try {
const updates = req.body;
for (const [key, value] of Object.entries(updates)) {
run(
`INSERT INTO br2_voice_config (key, value, updated_at) VALUES (?, ?, datetime('now'))
ON CONFLICT(key) DO UPDATE SET value = ?, updated_at = datetime('now')`,
[key, String(value), String(value)]
);
}
res.json({ updated: true });
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
// GET /api/voice/agent/:id — get voice for agent
router.get('/agent/:id', (req, res) => {
const voice = getVoice(req.params.id);
res.json({ agentId: req.params.id, voice });
});
export default router;