54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { apiRequest } from './api-request';
|
|
import { generateUUID } from '../utils/uuid';
|
|
import type { ApiWorksheet } from './content-api';
|
|
export interface UserStats {
|
|
favoriteCount: number;
|
|
downloadCount: number;
|
|
totalDownloads: string;
|
|
}
|
|
export interface MemberRecord {
|
|
id: string;
|
|
worksheetId: string;
|
|
exportId?: string | null;
|
|
createdAt: string;
|
|
worksheet: ApiWorksheet | null;
|
|
}
|
|
export interface MemberPage {
|
|
items: MemberRecord[];
|
|
total: number;
|
|
page: number;
|
|
pageSize: number;
|
|
hasNext: boolean;
|
|
}
|
|
export const memberStats = () => apiRequest<UserStats>('/me/stats');
|
|
/** uploadId 在一次操作中固定;401 重发沿用同一 ID,网络失败不自动重复上传。 */
|
|
export async function uploadAsset(
|
|
filePath: string,
|
|
purpose: 'avatar' | 'preview',
|
|
) {
|
|
return apiRequest<{
|
|
id: string;
|
|
url: string;
|
|
mimeType: string;
|
|
sizeBytes: number;
|
|
}>(
|
|
purpose === 'avatar'
|
|
? '/me/avatar-upload'
|
|
: '/admin/assets/preview-upload',
|
|
{ method: 'POST', upload: { filePath, uploadId: generateUUID() } },
|
|
);
|
|
}
|
|
export function legacyWorksheet(row: ApiWorksheet | null) {
|
|
return row
|
|
? {
|
|
...row,
|
|
_id: row.id,
|
|
subcategory:
|
|
(row as ApiWorksheet & { subcategory?: string | null })
|
|
.subcategory || '',
|
|
tags: (row as ApiWorksheet & { tags?: string[] }).tags || [],
|
|
previewImg: row.previewImg || '',
|
|
}
|
|
: null;
|
|
}
|