import { apiRequest } from '../services/api-request'; import { legacyWorksheet, memberStats, type MemberPage, } from '../services/member-api'; import tracker from './tracker'; export interface FavoriteRecord { _id: string; worksheetId: string; createdAt: string; worksheet?: { _id: string; title: string; subtitle: string; category: string; subcategory: string; path: string; ageMin: number; ageMax: number; difficulty: number; previewImg: string; tags: string[]; } | null; } /** 收藏操作使用新后端当前账户;调用失败不能向其他用户补发。 */ export async function addFavorite(worksheetId: string): Promise { try { await apiRequest(`/me/favorites/${encodeURIComponent(worksheetId)}`, { method: 'PUT', }); tracker.reportFavorite(currentRoute(), worksheetId, true); return true; } catch { return false; } } export async function removeFavorite(worksheetId: string): Promise { try { await apiRequest(`/me/favorites/${encodeURIComponent(worksheetId)}`, { method: 'DELETE', }); tracker.reportFavorite(currentRoute(), worksheetId, false); return true; } catch { return false; } } export async function getFavoriteList( page = 1, pageSize = 20, ): Promise { const result = await apiRequest('/me/favorites', { data: { page, pageSize }, }); return result.items.map((row) => ({ ...row, _id: row.id, worksheet: legacyWorksheet(row.worksheet), })); } export async function getFavoriteCount(): Promise { return (await memberStats()).favoriteCount; } export async function batchCheckFavorited( worksheetIds: string[], ): Promise> { if (!worksheetIds.length) return {}; return apiRequest('/me/favorites/check', { method: 'POST', data: { worksheetIds }, }); } export async function checkFavorited(worksheetId: string): Promise { return (await batchCheckFavorited([worksheetId]))[worksheetId] === true; } function currentRoute() { const pages = getCurrentPages(); return pages[pages.length - 1]?.route || ''; }