Files

65 lines
1.7 KiB
TypeScript

import { getUser } from './auth';
import { apiRequest } from '../services/api-request';
import {
legacyWorksheet,
memberStats,
type MemberPage,
} from '../services/member-api';
import { generateUUID } from './uuid';
export interface DownloadLogRecord {
_id: string;
worksheetId: string;
exportId?: string | null;
createdAt: string;
worksheet?: {
_id: string;
title: string;
subtitle: string;
category: string;
subcategory: string;
path: string;
ageMin?: number;
ageMax?: number;
difficulty?: number;
previewImg: string;
} | null;
}
/** 一次成功保存沿用同一个 exportId,服务端保证记录及下载计数幂等。 */
export async function addDownloadLog(
worksheetId: string,
exportId = generateUUID(),
expectedUserId?: string,
): Promise<boolean> {
if (!worksheetId) return false;
try {
const user = await getUser();
if (expectedUserId && user.id !== expectedUserId) return false;
await apiRequest('/me/downloads', {
method: 'POST',
data: { worksheetId, exportId },
});
return true;
} catch {
return false;
}
}
export const DOWNLOAD_HISTORY_MAX = 30;
export async function getDownloadLogs(
page = 1,
pageSize = DOWNLOAD_HISTORY_MAX,
): Promise<DownloadLogRecord[]> {
const result = await apiRequest<MemberPage>('/me/downloads', {
data: { page, pageSize },
});
return result.items.map((row) => ({
...row,
_id: row.id,
worksheet: legacyWorksheet(row.worksheet),
}));
}
export async function getDownloadLogCount(): Promise<number> {
return (await memberStats()).downloadCount;
}