const { Router } = require('express'); const memory = require('../services/memory'); const { EPISODIC } = require('@nexusai/shared'); const router = Router(); router.get('/:sessionId/history', async (req, res) => { const { sessionId } = req.params; const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query; try { const session = await memory.getSessionByExternalId(sessionId); if (!session) return res.status(404).json({ error: 'Session not found' }); const history = await memory.getSessionHistory(session.id, Number(limit), Number(offset)); res.json({ sessionId, episodes: history }); } catch (err) { res.status(500).json({ error: 'Failed to fetch session history', detail: err.message }); } }); router.get('/', async (req, res) => { const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET, projectId } = req.query; const parsedProjectId = projectId && projectId !== 'null' ? projectId : null; try { const sessions = await memory.getSessions(Number(limit), Number(offset), parsedProjectId); res.json(sessions); } catch (err) { res.status(500).json({ error: 'Failed to fetch sessions', detail: err.message }); } }); router.patch('/:sessionId', async (req, res) => { const { name, projectId } = req.body; // Allow patch with just projectId, or just name, or both if (!name?.trim() && projectId === undefined) { return res.status(400).json({ error: 'name or projectId is required' }); } try { const session = await memory.updateSession(req.params.sessionId, { name: name?.trim() || undefined, projectId }); res.json(session); } catch (err) { res.status(500).json({ error: 'Failed to update session', detail: err.message }); } }); router.delete('/:sessionId', async (req, res) => { try { await memory.deleteSession(req.params.sessionId); res.status(204).send(); } catch (err) { res.status(500).json({ error: 'Failed to delete session', detail: err.message }); } }); module.exports = router;