fix: 素材库新建自动获取/创建默认项目以提供 project_id #94

Merged
xiaoxia merged 2 commits from fix/asset-library-project-id into develop 2026-06-29 09:11:06 +08:00
2 changed files with 68 additions and 2 deletions
+8 -2
View File
@@ -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<AssetLibraryItem[]> => {
return response.data.items || [];
};
/** 创建素材库 */
/** 创建素材库(自动获取或创建默认项目以提供 project_id) */
export const createAssetLibrary = async (data: {
name: string;
kind: 'video' | 'voice' | 'image';
}): Promise<AssetLibraryItem> => {
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;
};
+60
View File
@@ -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<ProjectItem[]> => {
const response = await apiClient.get<BackendListProjectsResponse>('/projects');
return (response.data.items || []).map(toProjectItem);
};
/** 创建项目 */
export const createProject = async (data: {
name: string;
description?: string;
}): Promise<ProjectItem> => {
const response = await apiClient.post<BackendProjectResponse>('/projects', {
name: data.name,
description: data.description || '',
});
return toProjectItem(response.data);
};
/** 获取或创建默认项目(素材库需要 project_id */
export const getOrCreateDefaultProject = async (): Promise<ProjectItem> => {
const projects = await getProjects();
if (projects.length > 0) {
return projects[0];
}
// 没有项目时自动创建默认项目
return createProject({
name: '默认项目',
description: '系统自动创建的默认项目',
});
};