45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
/**
|
|
* 素材库 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 || ""),
|
|
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<MediaAsset[]> {
|
|
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<MediaAsset> {
|
|
const response = await apiClient.get(`/assets/${id}`)
|
|
return mapAssetToMediaAsset(response.data)
|
|
}
|