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
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:
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user