video-flow-b/app/service/usecase/SceneEditUseCase.ts

53 lines
1.3 KiB
TypeScript

import { SceneEntity } from '../domain/Entities';
import { SceneItem, TagItem, TextItem } from '../domain/Item';
import { regenerateScene, applySceneToShots } from '@/api/video_flow';
/**
* 场景编辑用例
* 负责场景内容的初始化、修改和优化
*/
export class SceneEditUseCase {
constructor(private sceneItem: SceneItem) {
}
/**
* @description: 重新生成场景
* @param {TextItem} prompt
* @param {TagItem[]} tags
* @return {*}
*/
async AIgenerateScene(prompt: TextItem, tags: TagItem[]): Promise<SceneEntity> {
const promptText = prompt.entity.content;
const tagList = tags.map((tag) => tag.entity.content);
// 调用重新生成场景接口
const response = await regenerateScene({
sceneId: this.sceneItem.entity.id || '',
prompt: promptText,
tagTypes: tagList,
});
if (response.successful) {
const sceneEntity = response.data;
this.sceneItem.setEntity(sceneEntity);
return sceneEntity;
} else {
throw new Error(`重新生成场景失败: ${response.message}`);
}
}
/**
* 应用此场景到指定分镜
* @param shotIds 分镜ID列表
* @returns 应用结果
*/
async applyScene(shotIds: string[]) {
const sceneId = this.sceneItem.entity.id;
return await applySceneToShots({
sceneId,
shotIds
});
}
}