feat(frontend): API for visibility/fork/subscribe/marketplace/curated
This commit is contained in:
7
packages/frontend/src/api/admin-lessons.ts
Normal file
7
packages/frontend/src/api/admin-lessons.ts
Normal 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 }),
|
||||
};
|
||||
@@ -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'),
|
||||
};
|
||||
|
||||
16
packages/frontend/src/api/marketplace.ts
Normal file
16
packages/frontend/src/api/marketplace.ts
Normal 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 : ''}`);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user