diff --git a/packages/memory-service/src/index.js b/packages/memory-service/src/index.js index 67e19e9..34cfe36 100644 --- a/packages/memory-service/src/index.js +++ b/packages/memory-service/src/index.js @@ -3,6 +3,7 @@ const express = require('express'); const {getEnv, PORTS, EPISODIC} = require('@nexusai/shared'); const { getDB } = require('./db'); const { createProject, getProjects, getProject, updateProject, deleteProject } = require('./db/projects'); +const { createSummary, getSummary, getSummariesBySession, getSummariesByProject, updateSummary, deleteSummary } = require('./db/summaries'); const episodic = require('./episodic'); const semantic = require('./semantic'); @@ -270,6 +271,48 @@ app.delete('/projects/:id', (req, res) => { }); +/*********************************** */ +/********** Summary Routes ********** */ +/*********************************** */ + +// Create a summary (called by orchestration, fire-and-forget style) +app.post('/summaries', (req, res) => { + const { sessionId, projectId, content, tokenCount, episodeRange, metadata } = req.body; + if (!content) return res.status(400).json({ error: 'content is required' }); + if (!sessionId && !projectId) return res.status(400).json({ error: 'sessionId or projectId is required' }); + + try { + const summary = createSummary({ sessionId, projectId, content, tokenCount, episodeRange, metadata }); + res.status(201).json(summary); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +// Get summaries for a session +app.get('/sessions/:id/summaries', (req, res) => { + res.json(getSummariesBySession(req.params.id)); +}); + +// Get summaries for a project +app.get('/projects/:id/summaries', (req, res) => { + res.json(getSummariesByProject(req.params.id)); +}); + +// Update a summary (for cumulative updates) +app.patch('/summaries/:id', (req, res) => { + const summary = getSummary(req.params.id); + if (!summary) return res.status(404).json({ error: 'Not found' }); + res.json(updateSummary(req.params.id, req.body)); +}); + +// Delete a summary +app.delete('/summaries/:id', (req, res) => { + deleteSummary(req.params.id); + res.status(204).send(); +}); + + /********************************** */ /********** Start Server ********** */