import { generateCharacterBrief } from "@/api/video_flow"; import { StoryTemplateEntity } from "../domain/Entities"; import { getTemplateStoryList } from "@/api/movie_start"; /** * 模板故事用例 * 负责管理故事模板的获取与操作 */ export class TemplateStoryUseCase { /** 故事模板列表 */ templateStoryList: StoryTemplateEntity[] = []; /** 当前选中的故事模板 */ selectedTemplate: StoryTemplateEntity | null = null; constructor() {} /** * 获取故事模板列表 * @returns {Promise} - 故事模板实体数组 */ async getTemplateStoryList(): Promise { try { const response = await getTemplateStoryList(); if (response.successful && response.data) { this.templateStoryList = response.data.items; return response.data.items; } throw new Error(response.message || "获取故事模板列表失败"); } catch (error) { console.error("获取故事模板列表失败:", error); throw error; } } /** * 上传人物头像并分析特征, * @returns {Promise<{crop_url: string, whisk_caption: string}>} 返回新的头像URL和特征描述 */ async AvatarAndAnalyzeFeatures( imageUrl: string ): Promise<{ crop_url: string; whisk_caption: string }> { // 直接在这里处理上传和分析逻辑 try { // 2. 调用AI分析接口获取人物特征描述 const analysisResult = await generateCharacterBrief({ image_url: imageUrl, }); if (!analysisResult.successful || !analysisResult.data) { throw new Error("人物特征分析失败"); } // 3. 返回新的头像URL和特征描述,用于替换旧数据 const result = { crop_url: imageUrl, whisk_caption: JSON.stringify(analysisResult.data.character_brief), }; return result; } catch (error) { throw error; } } }