/** * 素材库 API(对接 /assets 接口,映射为 MediaAsset 类型) */ import apiClient from "../client" import type { AssetItem } from "../assets" import type { MediaAsset } from "./types" const inferMediaType = (mimeType: string): "video" | "image" | "audio" => { if (mimeType.startsWith("video/")) return "video" if (mimeType.startsWith("image/")) return "image" return "audio" } const mapAssetToMediaAsset = (asset: AssetItem): MediaAsset => { const metaDuration = typeof asset.metadata?.duration === "number" ? asset.metadata.duration : undefined return { id: asset.id, name: asset.name, type: inferMediaType(asset.mime_type || ""), source_url: asset.file_url, thumbnail_url: asset.thumbnail_url, duration: asset.duration ?? metaDuration, size: asset.file_size ?? undefined, tags: [], created_at: asset.created_at ?? "", quality_score: asset.quality_score ?? undefined, classification_status: asset.classification_status ?? undefined, } } /** 获取素材库列表 */ export async function getMediaAssets(libraryId?: string): Promise { const response = await apiClient.get("/assets", { params: libraryId ? { library_id: libraryId } : undefined, }) const items: AssetItem[] = response.data.items || [] return items.map(mapAssetToMediaAsset) } /** 获取单个素材 */ export async function getMediaAsset(id: string): Promise { const response = await apiClient.get(`/assets/${id}`) return mapAssetToMediaAsset(response.data) }