Files
doodle-mini/miniprogram/services/member-api.ts
T

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;
}