61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
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; |