修复爆款开头复刻/拆镜复刻软删步骤时未处理生成资源|素材云记录追加资源数据ID
This commit is contained in:
@@ -195,6 +195,35 @@ async def create_module_step(
|
||||
return step
|
||||
|
||||
|
||||
def _clear_project_final_resources_by_deleted_steps(
|
||||
project: ModuleGenerationProject,
|
||||
*,
|
||||
deleted_step_codes: set[str],
|
||||
config: ModuleGenerationFlowConfig,
|
||||
) -> list[str]:
|
||||
"""根据被软删的步骤,清空项目表中对应的最终资源字段。
|
||||
|
||||
第 3 步图片生成被软删时,下游第 5 步视频也基于旧图片失效,所以图片、视频、封面都要清空。
|
||||
第 5 步视频生成被软删时,只清空视频和封面,保留第 3 步图片结果。
|
||||
"""
|
||||
cleared_fields: list[str] = []
|
||||
|
||||
def clear_field(field_name: str) -> None:
|
||||
if getattr(project, field_name, None):
|
||||
cleared_fields.append(field_name)
|
||||
setattr(project, field_name, None)
|
||||
|
||||
if config.image_generate_step_code in deleted_step_codes:
|
||||
clear_field("final_image_url")
|
||||
clear_field("final_video_url")
|
||||
clear_field("final_video_cover_url")
|
||||
elif config.video_generate_step_code in deleted_step_codes:
|
||||
clear_field("final_video_url")
|
||||
clear_field("final_video_cover_url")
|
||||
|
||||
return cleared_fields
|
||||
|
||||
|
||||
async def soft_delete_steps_from_index(
|
||||
db: AsyncSession,
|
||||
*,
|
||||
@@ -217,6 +246,13 @@ async def soft_delete_steps_from_index(
|
||||
.with_for_update()
|
||||
)
|
||||
steps = list(result.scalars().all())
|
||||
deleted_step_codes = {step.step_code for step in steps}
|
||||
cleared_project_fields = _clear_project_final_resources_by_deleted_steps(
|
||||
project,
|
||||
deleted_step_codes=deleted_step_codes,
|
||||
config=config,
|
||||
)
|
||||
|
||||
for step in steps:
|
||||
step.is_current = False
|
||||
step.deleted_at = deleted_at
|
||||
@@ -245,7 +281,11 @@ async def soft_delete_steps_from_index(
|
||||
project=project,
|
||||
event_type=ModuleEventTypeEnum.SOFT_DELETE_STEPS.value,
|
||||
message=f"软删除第 {start_index} 步及之后的旧子任务",
|
||||
detail={"step_ids": [step.id for step in steps]},
|
||||
detail={
|
||||
"step_ids": [step.id for step in steps],
|
||||
"step_codes": [step.step_code for step in steps],
|
||||
"cleared_project_fields": cleared_project_fields,
|
||||
},
|
||||
)
|
||||
return steps
|
||||
|
||||
|
||||
Reference in New Issue
Block a user