1
This commit is contained in:
@@ -88,6 +88,8 @@ from app.services.module_generation_step_update_service import (
|
||||
update_module_video_prompt_schema,
|
||||
)
|
||||
from app.services.resource_signed_url_service import build_resource_signed_url
|
||||
from app.enums.upload_resource import UploadResourceModuleEnum, UploadResourceSourceModelEnum
|
||||
from app.services.upload_resource import bind_upload_resources, release_upload_resources_by_source
|
||||
from app.services.video_prompt_schema_config_service import fallback_runtime_schema_snapshot, get_runtime_schema_snapshot
|
||||
from app.utils.id_gen import generate_id
|
||||
from app.models.shot_replicate_segment import ShotReplicateSegment
|
||||
@@ -513,6 +515,7 @@ async def create_shot_replicate_project(db: AsyncSession, current_user: User, re
|
||||
input_data={
|
||||
"material_video_url": req.material_video_url,
|
||||
"material_image_url": req.material_image_url,
|
||||
"material_image_resource_id": getattr(req, "material_image_resource_id", None),
|
||||
"source_project_name": req.source_project_name,
|
||||
"target_project_name": req.target_project_name,
|
||||
"core_content_point": req.core_content_point,
|
||||
@@ -1493,7 +1496,13 @@ async def delete_shot_replicate_project(
|
||||
project_id: str,
|
||||
refund_unfinished: bool = False,
|
||||
) -> ShotReplicateDeleteOut:
|
||||
"""内部 helper:只软删除指定 ModuleGenerationProject 自身。
|
||||
|
||||
这里不是对外 API,不反查 ShotReplicateSegment / ShotReplicateTaskSet,
|
||||
不 commit、不 rollback、不删除真实 UploadResource 文件。
|
||||
"""
|
||||
project = await _get_project_for_user(db, project_id=project_id, user=current_user, for_update=True)
|
||||
project_id_snapshot = project.id
|
||||
deleted_at = _now()
|
||||
release_stats: dict[str, int] = {"released_size_bytes": 0}
|
||||
|
||||
@@ -1509,21 +1518,34 @@ async def delete_shot_replicate_project(
|
||||
refund_unfinished=refund_unfinished,
|
||||
release_stats=release_stats,
|
||||
)
|
||||
upload_release = await release_upload_resources_by_source(
|
||||
db,
|
||||
source_model=UploadResourceSourceModelEnum.MODULE_GENERATION_PROJECT.value,
|
||||
source_ids=[project_id_snapshot],
|
||||
module=UploadResourceModuleEnum.SHOT_REPLICATE.value,
|
||||
)
|
||||
pending_ids = list(upload_release.get("released_resource_ids") or [])
|
||||
generated_released = int(release_stats.get("released_size_bytes", 0) or 0)
|
||||
upload_released_size = int(upload_release.get("released_size_bytes") or 0)
|
||||
await log_module_event(
|
||||
db,
|
||||
project=project,
|
||||
event_type=ModuleEventTypeEnum.PROJECT_DELETED.value,
|
||||
message="软删除拆镜复刻项目",
|
||||
message="软删除拆镜复刻内部项目",
|
||||
detail={
|
||||
"refund_unfinished": refund_unfinished,
|
||||
"released_size_bytes": int(release_stats.get("released_size_bytes", 0)),
|
||||
"generated_resource_released_size_bytes": generated_released,
|
||||
"upload_resource_release": {k: v for k, v in upload_release.items() if k != "released_resource_ids"},
|
||||
"pending_delete_resource_count": len(pending_ids),
|
||||
},
|
||||
)
|
||||
return ShotReplicateDeleteOut(
|
||||
message="项目已删除",
|
||||
project_id=project.id,
|
||||
project_id=project_id_snapshot,
|
||||
deleted=True,
|
||||
released_size_bytes=int(release_stats.get("released_size_bytes", 0)),
|
||||
released_size_bytes=generated_released + upload_released_size,
|
||||
upload_resource_released=int(upload_release.get("released") or 0),
|
||||
pending_delete_resource_ids=pending_ids,
|
||||
)
|
||||
|
||||
|
||||
@@ -1583,6 +1605,7 @@ async def create_shot_replicate_project_from_segment(
|
||||
"material_video_url": segment.segment_video_url,
|
||||
"material_video_locked": True,
|
||||
"material_image_url": req.material_image_url,
|
||||
"material_image_resource_id": getattr(req, "material_image_resource_id", None),
|
||||
"source_project_name": segment.segment_category or segment.original_video_category or "拆镜片段",
|
||||
"target_project_name": req.target_project_name,
|
||||
"core_content_point": req.core_content_point,
|
||||
@@ -1626,6 +1649,16 @@ async def create_shot_replicate_project_from_segment(
|
||||
)
|
||||
project.current_step_code = ShotReplicateStepCodeEnum.MATERIAL_INPUT.value
|
||||
project.status = ModuleProjectStatusEnum.WAITING_USER.value
|
||||
await bind_upload_resources(
|
||||
db,
|
||||
user_id=current_user.id,
|
||||
module=UploadResourceModuleEnum.SHOT_REPLICATE.value,
|
||||
source_model=UploadResourceSourceModelEnum.MODULE_GENERATION_PROJECT.value,
|
||||
source_id=project.id,
|
||||
resource_ids=[getattr(req, "material_image_resource_id", None)],
|
||||
urls=[req.material_image_url, segment.segment_video_url],
|
||||
allow_common_migrate=True,
|
||||
)
|
||||
segment.module_project_id = project.id
|
||||
segment.replicate_status = ShotSegmentReplicateStatusEnum.PROJECT_CREATED.value
|
||||
await log_module_event(
|
||||
|
||||
Reference in New Issue
Block a user