fix(api): create_plan接口增加asset_ids参数并传递给PlanGeneratorService
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 44s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 5s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 41s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m45s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m18s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 9m4s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m21s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 10m16s

- EditPlanCreateRequest增加asset_ids字段
- create_plan调用generate_from_template时传递body.asset_ids而非硬编码空数组
- asset_ids同时写入plan.config,供generate时兜底分配
- 新增test_create_with_asset_ids测试验证参数传递
This commit is contained in:
CI Bot
2026-07-17 15:53:18 +08:00
parent cefd97966a
commit 53c6e66eaa
2 changed files with 50 additions and 1 deletions
+9 -1
View File
@@ -50,6 +50,7 @@ class EditPlanCreateRequest(BaseModel):
config: dict[str, Any] = Field(default_factory=dict, description="计划配置 (JSON)")
total_duration: float = Field(default=0.0, ge=0.0, description="总时长 (秒)")
project_id: str = Field(default="", description="所属项目 ID")
asset_ids: List[str] = Field(default_factory=list, description="素材 ID 列表,创建时自动分配给片段")
class EditPlanUpdateRequest(BaseModel):
@@ -419,7 +420,7 @@ def create_plan(
result = generator.generate_from_template(
template=template,
clip_configs=clip_configs,
asset_ids=[],
asset_ids=body.asset_ids,
project_id=project_id,
created_by_user_id=current_user.user.id,
name=body.name,
@@ -445,6 +446,13 @@ def create_plan(
total_duration=body.total_duration if body.total_duration > 0 else None,
)
# 把 asset_ids 写入 plan.config,供生成时兜底分配使用
if body.asset_ids:
current_config = plan.config or {}
if current_config.get("asset_ids") != body.asset_ids:
current_config["asset_ids"] = body.asset_ids
plan = svc.update_plan(plan.id, config=normalize_plan_config(current_config))
logger.info(
"创建剪辑计划: id=%s name=%s clips=%d by user=%s",
plan.id,
+41
View File
@@ -238,6 +238,47 @@ class TestCreatePlan:
assert call_kwargs["name"] == "我的剪辑计划"
assert call_kwargs["created_by_user_id"] == "user-001"
@patch("app.api.routes.edit_plans.EditTemplateService")
@patch("app.services.PlanGeneratorService")
def test_create_with_asset_ids(self, mock_generator_cls, mock_template_svc_cls, client):
"""创建计划时传入 asset_ids,应传递给生成器并写入 plan.config"""
c, repo = client
mock_template_svc = MagicMock()
mock_template_svc.get_template_or_raise.return_value = MagicMock(
id="tpl-001",
name="测试模板",
config={},
)
mock_template_svc.list_clip_configs.return_value = []
mock_template_svc_cls.return_value = mock_template_svc
mock_gen = MagicMock()
test_plan = self._make_test_plan(name="带素材计划")
test_plan.status = EditPlanStatus.EDITING
repo.create(test_plan)
mock_gen.generate_from_template.return_value = {
"plan": test_plan,
"clips": [],
}
mock_generator_cls.return_value = mock_gen
asset_ids = ["asset-001", "asset-002", "asset-003"]
resp = c.post(
"/api/v1/edit-plans",
json={
"template_id": "tpl-001",
"name": "带素材计划",
"asset_ids": asset_ids,
},
)
assert resp.status_code == 201
# 验证 asset_ids 传递给了生成器
mock_gen.generate_from_template.assert_called_once()
call_kwargs = mock_gen.generate_from_template.call_args[1]
assert call_kwargs["asset_ids"] == asset_ids
@patch("app.api.routes.edit_plans.EditTemplateService")
@patch("app.services.PlanGeneratorService")
def test_create_minimal(self, mock_generator_cls, mock_template_svc_cls, client):