diff --git a/apps/web/src/api/assets.ts b/apps/web/src/api/assets.ts index 56a20468d..b95c736fb 100644 --- a/apps/web/src/api/assets.ts +++ b/apps/web/src/api/assets.ts @@ -3,6 +3,7 @@ * Phase 1 重构:去掉 project_id,素材直接归属用户 */ import apiClient from './client'; +import { getOrCreateDefaultProject } from './projects'; /** 素材条目 */ export interface AssetItem { @@ -93,12 +94,17 @@ export const getAssetLibraries = async (): Promise => { return response.data.items || []; }; -/** 创建素材库 */ +/** 创建素材库(自动获取或创建默认项目以提供 project_id) */ export const createAssetLibrary = async (data: { name: string; kind: 'video' | 'voice' | 'image'; }): Promise => { - const response = await apiClient.post('/asset-libraries', data); + // 后端要求 project_id,前端自动管理默认项目 + const project = await getOrCreateDefaultProject(); + const response = await apiClient.post('/asset-libraries', { + project_id: project.id, + ...data, + }); return response.data; }; diff --git a/apps/web/src/api/projects.ts b/apps/web/src/api/projects.ts new file mode 100644 index 000000000..fb3d73bb1 --- /dev/null +++ b/apps/web/src/api/projects.ts @@ -0,0 +1,60 @@ +/** + * 项目相关 API + * 素材库需要 project_id,前端自动管理默认项目 + */ +import apiClient from './client'; + +export interface ProjectItem { + id: string; + name: string; + description: string; +} + +/** 后端 ProjectResponse 只返回 id, name, description */ +interface BackendProjectResponse { + id: string; + name: string; + description: string; +} + +/** 后端 ListProjectsResponse 返回 { items: [...] } */ +interface BackendListProjectsResponse { + items: BackendProjectResponse[]; +} + +const toProjectItem = (item: BackendProjectResponse): ProjectItem => ({ + id: item.id, + name: item.name, + description: item.description, +}); + +/** 获取当前用户的项目列表 */ +export const getProjects = async (): Promise => { + const response = await apiClient.get('/projects'); + return (response.data.items || []).map(toProjectItem); +}; + +/** 创建项目 */ +export const createProject = async (data: { + name: string; + description?: string; +}): Promise => { + const response = await apiClient.post('/projects', { + name: data.name, + description: data.description || '', + }); + return toProjectItem(response.data); +}; + +/** 获取或创建默认项目(素材库需要 project_id) */ +export const getOrCreateDefaultProject = async (): Promise => { + const projects = await getProjects(); + if (projects.length > 0) { + return projects[0]; + } + // 没有项目时自动创建默认项目 + return createProject({ + name: '默认项目', + description: '系统自动创建的默认项目', + }); +};