feat(phase7): wire asset upload and ingest flow

This commit is contained in:
Xiaoxia AI
2026-06-17 18:14:35 +08:00
parent fe8786f5fa
commit 8aeb46aded
8 changed files with 380 additions and 80 deletions
+70
View File
@@ -0,0 +1,70 @@
/**
* 素材相关 API
*/
import apiClient from './client';
export interface AssetItem {
id: string;
workspace_id: string;
project_id: string;
library_id: string;
name: string;
storage_key: string;
mime_type: string;
metadata: Record<string, unknown>;
}
export interface AssetLibraryItem {
id: string;
workspace_id: string;
project_id: string;
name: string;
kind: 'video' | 'voice';
}
export interface IngestJob {
id: string;
workspace_id: string;
project_id: string;
library_id: string;
storage_key: string;
status: 'pending' | 'processing' | 'completed' | 'failed';
error_message: string;
result_asset_id: string;
}
export const getAssetLibraries = async (projectId: string): Promise<AssetLibraryItem[]> => {
const response = await apiClient.get('/asset-libraries', {
params: { project_id: projectId },
});
return response.data.items;
};
export const createAssetLibrary = async (data: {
workspace_id: string;
project_id: string;
name: string;
kind: 'video' | 'voice';
}): Promise<AssetLibraryItem> => {
const response = await apiClient.post('/asset-libraries', data);
return response.data;
};
export const getAssets = async (libraryId: string): Promise<AssetItem[]> => {
const response = await apiClient.get('/assets', {
params: { library_id: libraryId },
});
return response.data.items;
};
export const uploadAsset = async (formData: FormData): Promise<{ storage_key: string; ingest_job_id: string; url: string }> => {
const response = await apiClient.post('/upload', formData, {
headers: { 'Content-Type': 'multipart/form-data' },
});
return response.data;
};
export const getIngestJob = async (jobId: string): Promise<IngestJob> => {
const response = await apiClient.get(`/ingest-jobs/${jobId}`);
return response.data;
};
-9
View File
@@ -3,7 +3,6 @@
*/
import apiClient from './client';
// 类型定义
export interface Workspace {
id: string;
name: string;
@@ -32,19 +31,16 @@ export interface InviteMemberRequest {
role: 'admin' | 'member' | 'viewer';
}
// 获取工作空间列表
export const getWorkspaces = async (): Promise<Workspace[]> => {
const response = await apiClient.get('/workspaces');
return response.data;
};
// 获取工作空间详情
export const getWorkspace = async (id: string): Promise<Workspace> => {
const response = await apiClient.get(`/workspaces/${id}`);
return response.data;
};
// 创建工作空间
export const createWorkspace = async (
data: CreateWorkspaceRequest
): Promise<Workspace> => {
@@ -52,13 +48,11 @@ export const createWorkspace = async (
return response.data;
};
// 获取成员列表
export const getMembers = async (workspaceId: string): Promise<WorkspaceMember[]> => {
const response = await apiClient.get(`/workspaces/${workspaceId}/members`);
return response.data;
};
// 邀请成员
export const inviteMember = async (
workspaceId: string,
data: InviteMemberRequest
@@ -67,7 +61,6 @@ export const inviteMember = async (
return response.data;
};
// 移除成员
export const removeMember = async (
workspaceId: string,
memberId: string
@@ -76,7 +69,6 @@ export const removeMember = async (
return response.data;
};
// 更新成员角色
export const updateMemberRole = async (
workspaceId: string,
memberId: string,
@@ -88,7 +80,6 @@ export const updateMemberRole = async (
return response.data;
};
// 离开工作空间
export const leaveWorkspace = async (workspaceId: string): Promise<{ message: string }> => {
const response = await apiClient.post(`/workspaces/${workspaceId}/leave`);
return response.data;