28 lines
1.5 KiB
TypeScript
28 lines
1.5 KiB
TypeScript
import { request } from '../../lib/http'
|
|
import type { GlobalProjectAsset, ProjectAsset, UpdateProjectAssetInput, UploadProjectAssetInput } from './types'
|
|
|
|
/** 固定项目资产路径并编码正式数据库 ID。 */
|
|
function assetPath(projectId: string, assetId?: string) {
|
|
const base = `/projects/${encodeURIComponent(projectId)}/assets`
|
|
return assetId ? `${base}/${encodeURIComponent(assetId)}` : base
|
|
}
|
|
|
|
/** 项目素材 API;上传使用 multipart,浏览和编辑不调用生成模型。 */
|
|
export const projectAssetsApi = {
|
|
listAll: (signal?: AbortSignal) => request<GlobalProjectAsset[]>('/assets', { signal }),
|
|
list: (projectId: string, signal?: AbortSignal) => request<ProjectAsset[]>(assetPath(projectId), { signal }),
|
|
get: (projectId: string, assetId: string, signal?: AbortSignal) =>
|
|
request<ProjectAsset>(assetPath(projectId, assetId), { signal }),
|
|
upload: (projectId: string, input: UploadProjectAssetInput) => {
|
|
const body = new FormData()
|
|
body.append('file', input.file)
|
|
body.append('name', input.name)
|
|
body.append('category', input.category)
|
|
return request<ProjectAsset>(assetPath(projectId), { method: 'POST', body, timeoutMs: 0 })
|
|
},
|
|
update: (projectId: string, assetId: string, input: UpdateProjectAssetInput) =>
|
|
request<ProjectAsset>(assetPath(projectId, assetId), { method: 'PUT', body: input }),
|
|
remove: (projectId: string, assetId: string) =>
|
|
request<ProjectAsset>(assetPath(projectId, assetId), { method: 'DELETE' })
|
|
}
|