From ab382a2c62d84cca4f626d18168a4a9e2631bf76 Mon Sep 17 00:00:00 2001 From: Bert Hausmans Date: Thu, 21 May 2026 07:02:57 +0200 Subject: [PATCH] feat(frontend): API clients for search + stats extensions + due session --- packages/frontend/src/api/search.ts | 28 +++++++++++++++++++++++++++ packages/frontend/src/api/sessions.ts | 1 + packages/frontend/src/api/stats.ts | 5 +++++ 3 files changed, 34 insertions(+) create mode 100644 packages/frontend/src/api/search.ts diff --git a/packages/frontend/src/api/search.ts b/packages/frontend/src/api/search.ts new file mode 100644 index 0000000..79ec7b6 --- /dev/null +++ b/packages/frontend/src/api/search.ts @@ -0,0 +1,28 @@ +import { api } from './client.js'; + +export interface SearchLessonResult { + id: number; + name: string; + ownerDisplayName: string; + location: 'library' | 'marketplace'; + totalCards: number; + isCurated: boolean; +} + +export interface SearchCardResult { + id: number; + lessonId: number; + lessonName: string; + question: string; + snippet: string; +} + +export interface SearchResult { + lessons: SearchLessonResult[]; + cards: SearchCardResult[]; +} + +export const searchApi = { + search: (q: string, limit = 30) => + api.get(`/search?q=${encodeURIComponent(q)}&limit=${limit}`), +}; diff --git a/packages/frontend/src/api/sessions.ts b/packages/frontend/src/api/sessions.ts index 85f4b0c..95abc59 100644 --- a/packages/frontend/src/api/sessions.ts +++ b/packages/frontend/src/api/sessions.ts @@ -6,6 +6,7 @@ export interface SessionState { session: SessionRow; queue: QueueItem[]; index: export const sessionsApi = { start: (input: SessionStartInput) => api.post('/sessions', input), + startDue: () => api.post(`/sessions/due`), active: () => api.get('/sessions/active'), state: (id: number) => api.get(`/sessions/${id}`), next: (id: number) => api.get<{ done: true } | { done: false; item: QueueItem }>(`/sessions/${id}/next`), diff --git a/packages/frontend/src/api/stats.ts b/packages/frontend/src/api/stats.ts index a396083..0e2282f 100644 --- a/packages/frontend/src/api/stats.ts +++ b/packages/frontend/src/api/stats.ts @@ -20,4 +20,9 @@ export const statsApi = { lesson: (id: number) => api.get(`/stats/lessons/${id}`), card: (id: number) => api.get(`/stats/cards/${id}`), heatmap: (weeks = 12) => api.get<{ day: string; sessions: number; attempts: number }[]>(`/stats/heatmap?weeks=${weeks}`), + lessonsProgress: () => api.get<{ rows: Array<{ + lessonId: number; name: string; totalCards: number; masteredCards: number; + scorePct: number; lastSessionAt: number | null; + }> }>(`/stats/lessons-progress`), + due: () => api.get<{ overdue: number; today: number; tomorrow: number; thisWeek: number }>(`/stats/due`), };