fix: 素材库新建自动获取/创建默认项目以提供 project_id #94
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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: '系统自动创建的默认项目',
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user