bulk episodic deletion
This commit is contained in:
@@ -112,6 +112,29 @@ app.post('/episodes', async (req, res) => {
|
||||
res.status(201).json(episode);
|
||||
});
|
||||
|
||||
app.get('/episodes', (req, res) => {
|
||||
const { limit = 50, offset = 0, sessionId, q } = req.query;
|
||||
|
||||
if (q) {
|
||||
const results = episodic.searchEpisodes(q, Number(limit));
|
||||
return res.json({ episodes: results, total: results.length });
|
||||
}
|
||||
|
||||
const db = getDB();
|
||||
let episodes;
|
||||
|
||||
if (sessionId) {
|
||||
episodes = episodic.getEpisodesBySession(Number(sessionId), Number(limit), Number(offset));
|
||||
} else {
|
||||
episodes = db.prepare(
|
||||
`SELECT * FROM episodes ORDER BY created_at DESC LIMIT ? OFFSET ?`
|
||||
).all(Number(limit), Number(offset)).map(row => require('@nexusai/shared').parseRow(row));
|
||||
}
|
||||
|
||||
const total = db.prepare(`SELECT COUNT(*) as count FROM episodes`).get().count;
|
||||
res.json({ episodes, total });
|
||||
});
|
||||
|
||||
// Search MUST come before /:id — otherwise 'search' gets captured as an id
|
||||
app.get('/episodes/search', (req, res) => {
|
||||
const { q, limit = EPISODIC.DEFAULT_PAGE_SIZE } = req.query;
|
||||
@@ -138,7 +161,12 @@ app.get('/sessions/:id/episodes', (req, res) => {
|
||||
});
|
||||
|
||||
app.delete('/episodes/:id', (req, res) => {
|
||||
episodic.deleteEpisode(req.params.id);
|
||||
const id = Number(req.params.id);
|
||||
episodic.deleteEpisode(id);
|
||||
|
||||
semantic.deleteEpisode(id) // fire-and-forget
|
||||
.catch(err => console.error(`[Memory] Qdrant delete failed for episode ${id}:`, err.message));
|
||||
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user