get sessions by projectId

This commit is contained in:
Storme-bit
2026-04-14 01:07:59 -07:00
parent 8d4a553a2a
commit 7598e8b9f4
5 changed files with 37 additions and 18 deletions

View File

@@ -4,8 +4,13 @@ const BASE_URL = import.meta.env.VITE_ORCHESTRATION_URL ?? '';
// ── Sessions ──────────────────────────────────────────────── // ── Sessions ────────────────────────────────────────────────
export async function fetchSessions(limit = API_DEFAULTS.SESSIONS_LIMIT, offset = API_DEFAULTS.OFFSET) { export async function fetchSessions(limit = API_DEFAULTS.SESSIONS_LIMIT, offset = API_DEFAULTS.OFFSET, projectId = null) {
const res = await fetch(`${BASE_URL}/sessions?limit=${limit}&offset=${offset}`); const url = new URL(`${BASE_URL}/sessions`, window.location.origin);
url.searchParams.set('limit', limit);
url.searchParams.set('offset', offset);
if (projectId) url.searchParams.set('projectId', projectId);
const res = await fetch(url.toString());
if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`); if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`);
return res.json(); return res.json();
} }

View File

@@ -23,14 +23,25 @@ function getSession(id) {
return parseRow(stmt.get(id)); return parseRow(stmt.get(id));
} }
function getSessions(limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = 0) {
function getSessions(limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = 0, projectId = null) {
const db = getDB(); const db = getDB();
const stmt = db.prepare(` const stmt = projectId
? db.prepare(`
SELECT * FROM sessions
WHERE project_id = ?
ORDER BY updated_at DESC
LIMIT ? OFFSET ?
`)
: db.prepare(`
SELECT * FROM sessions SELECT * FROM sessions
ORDER BY updated_at DESC ORDER BY updated_at DESC
LIMIT ? OFFSET ? LIMIT ? OFFSET ?
`); `);
return stmt.all(limit, offset).map(parseRow);
return projectId
? stmt.all(projectId, limit, offset).map(parseRow)
: stmt.all(limit, offset).map(parseRow);
} }
// Retrieves a session by its external ID // Retrieves a session by its external ID

View File

@@ -44,8 +44,8 @@ app.post('/sessions', (req, res) => {
}); });
app.get('/sessions', (req, res) => { app.get('/sessions', (req, res) => {
const {limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query; const {limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET, projectId } = req.query;
const sessions = episodic.getSessions(Number(limit), Number(offset)); const sessions = episodic.getSessions(Number(limit), Number(offset, projectId ?? null));
res.json(sessions); res.json(sessions);
}) })

View File

@@ -22,7 +22,7 @@ router.get('/:sessionId/history', async (req, res) => {
router.get('/', async (req, res) => { router.get('/', async (req, res) => {
const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query; const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query;
try { try {
const sessions = await memory.getSessions(Number(limit), Number(offset)); const sessions = await memory.getSessions(Number(limit), Number(offset), projectId ?? null);
res.json(sessions); res.json(sessions);
} catch (err) { } catch (err) {
res.status(500).json({error: err.message}); res.status(500).json({error: err.message});

View File

@@ -55,10 +55,13 @@ async function getSessionHistory(sessionId, limit = EPISODIC.DEFAULT_SESSIONS_LI
return res.json(); return res.json();
} }
async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPISODIC.DEFAULT_OFFSET) { async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPISODIC.DEFAULT_OFFSET, projectId = null) {
const res = await fetch( const url = new URL(`${BASE_URL}/sessions`);
`${BASE_URL}/sessions?limit=${limit}&offset=${offset}` url.searchParams.set('limit', limit);
); url.searchParams.set('offset', offset);
if (projectId) url.searchParams.set('projectId', projectId);
const res = await fetch(url.toString());
if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`); if (!res.ok) throw new Error(`Failed to fetch sessions: ${res.status}`);
return res.json(); return res.json();
} }