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 ────────────────────────────────────────────────
export async function fetchSessions(limit = API_DEFAULTS.SESSIONS_LIMIT, offset = API_DEFAULTS.OFFSET) {
const res = await fetch(`${BASE_URL}/sessions?limit=${limit}&offset=${offset}`);
export async function fetchSessions(limit = API_DEFAULTS.SESSIONS_LIMIT, offset = API_DEFAULTS.OFFSET, projectId = null) {
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}`);
return res.json();
}

View File

@@ -23,14 +23,25 @@ function getSession(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 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
ORDER BY updated_at DESC
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

View File

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

View File

@@ -22,7 +22,7 @@ router.get('/:sessionId/history', async (req, res) => {
router.get('/', async (req, res) => {
const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query;
try {
const sessions = await memory.getSessions(Number(limit), Number(offset));
const sessions = await memory.getSessions(Number(limit), Number(offset), projectId ?? null);
res.json(sessions);
} catch (err) {
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();
}
async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPISODIC.DEFAULT_OFFSET) {
const res = await fetch(
`${BASE_URL}/sessions?limit=${limit}&offset=${offset}`
);
async function getSessions(limit = EPISODIC.DEFAULT_SESSIONS_LIMIT, offset = EPISODIC.DEFAULT_OFFSET, projectId = null) {
const url = new URL(`${BASE_URL}/sessions`);
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}`);
return res.json();
}