feat(frontend): API for visibility/fork/subscribe/marketplace/curated

This commit is contained in:
2026-05-21 00:32:50 +02:00
parent 4d4001e202
commit 01f7df3735
3 changed files with 33 additions and 1 deletions

View File

@@ -0,0 +1,7 @@
import type { Lesson } from '@flashcard/shared';
import { api } from './client.js';
export const adminLessonsApi = {
setCurated: (id: number, isCurated: boolean) =>
api.patch<Lesson>(`/admin/lessons/${id}/curated`, { isCurated }),
};

View File

@@ -1,4 +1,7 @@
import type { Lesson, LessonCreateInput, LessonMoveInput, LessonTreeNode, LessonUpdateInput } from '@flashcard/shared';
import type {
Lesson, LessonCreateInput, LessonMoveInput, LessonTreeNode, LessonUpdateInput,
Visibility, SubscriptionEntry,
} from '@flashcard/shared';
import { api } from './client.js';
export const lessonsApi = {
@@ -7,4 +10,10 @@ export const lessonsApi = {
update: (id: number, input: LessonUpdateInput) => api.patch<Lesson>(`/lessons/${id}`, input),
remove: (id: number) => api.delete<void>(`/lessons/${id}`),
move: (id: number, input: LessonMoveInput) => api.post<Lesson>(`/lessons/${id}/move`, input),
setVisibility: (id: number, visibility: Visibility) =>
api.patch<Lesson>(`/lessons/${id}/visibility`, { visibility }),
fork: (id: number) => api.post<Lesson>(`/lessons/${id}/fork`),
subscribe: (id: number) => api.post<{ ok: true }>(`/lessons/${id}/subscribe`),
unsubscribe: (id: number) => api.delete<void>(`/lessons/${id}/subscribe`),
mySubscriptions: () => api.get<SubscriptionEntry[]>('/me/subscriptions'),
};

View File

@@ -0,0 +1,16 @@
import type { MarketplaceLesson } from '@flashcard/shared';
import { api } from './client.js';
export interface MarketplaceListResponse { rows: MarketplaceLesson[]; total: number; }
export const marketplaceApi = {
list: (params: { q?: string; curated?: boolean; limit?: number; offset?: number } = {}) => {
const qs = new URLSearchParams();
if (params.q) qs.set('q', params.q);
if (params.curated !== undefined) qs.set('curated', String(params.curated));
if (params.limit !== undefined) qs.set('limit', String(params.limit));
if (params.offset !== undefined) qs.set('offset', String(params.offset));
const s = qs.toString();
return api.get<MarketplaceListResponse>(`/marketplace/lessons${s ? '?' + s : ''}`);
},
};