style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 4s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled

This commit is contained in:
CI Bot
2026-08-31 11:10:45 +00:00
parent 5224870f8d
commit 8a46ef49b9
3 changed files with 18 additions and 34 deletions
@@ -27,9 +27,7 @@ def upgrade() -> None:
# material_type -> config JSON {"material_type": ...}
# clip_type -> "main" (默认值)
# 只迁移 template_clip_configs 中没有对应 template_id 的记录
op.execute(
sa.text(
"""
op.execute(sa.text("""
INSERT INTO template_clip_configs
(id, template_id, clip_type, "order", min_duration, max_duration,
text_template, material_requirements, transition_effect, config,
@@ -56,9 +54,7 @@ def upgrade() -> None:
SELECT 1 FROM template_clip_configs c
WHERE c.template_id = s.template_id
)
"""
)
)
"""))
def downgrade() -> None:
@@ -218,14 +218,16 @@ class SQLAlchemyTemplateRepository:
# 复用 create_segments 写入 template_clip_configs
new_segments: List[TemplateSegment] = []
for seg in source.segments:
new_segments.append(TemplateSegment(
id=str(uuid.uuid4()),
template_id=created.id,
segment_order=seg.segment_order,
duration_min=seg.duration_min,
duration_max=seg.duration_max,
material_type=seg.material_type,
))
new_segments.append(
TemplateSegment(
id=str(uuid.uuid4()),
template_id=created.id,
segment_order=seg.segment_order,
duration_min=seg.duration_min,
duration_max=seg.duration_max,
material_type=seg.material_type,
)
)
if new_segments:
self.create_segments(new_segments)
else:
@@ -282,11 +284,7 @@ class SQLAlchemyTemplateRepository:
.filter(TemplateClipConfigModel.template_id == template_id)
.delete()
)
c2 = (
self.session.query(TemplateSegmentModel)
.filter(TemplateSegmentModel.template_id == template_id)
.delete()
)
c2 = self.session.query(TemplateSegmentModel).filter(TemplateSegmentModel.template_id == template_id).delete()
self.session.commit()
return c1 + c2
+5 -15
View File
@@ -88,9 +88,7 @@ class TestCreateSegments:
seg = _make_segment(tpl.id, order=1)
repo.create_segments([seg])
clips = session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == tpl.id
).all()
clips = session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == tpl.id).all()
assert len(clips) == 1
assert clips[0].clip_type == "main"
assert clips[0].order == 1
@@ -105,9 +103,7 @@ class TestCreateSegments:
seg = _make_segment(tpl.id, order=1, material_type="voiceover")
repo.create_segments([seg])
clip = session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == tpl.id
).first()
clip = session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == tpl.id).first()
assert clip.config["material_type"] == "voiceover"
@@ -232,9 +228,7 @@ class TestCopyTemplate:
assert len(copied.segments) == 1
# 验证写入的是 clip_configs 表
clips = session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == copied.id
).all()
clips = session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == copied.id).all()
assert len(clips) == 1
assert clips[0].config["material_type"] == "voiceover"
@@ -272,12 +266,8 @@ class TestDelete:
repo.delete(tpl.id, "u1")
# 两张表都应该被清理
c1 = session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == tpl.id
).count()
c2 = session.query(TemplateSegmentModel).filter(
TemplateSegmentModel.template_id == tpl.id
).count()
c1 = session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == tpl.id).count()
c2 = session.query(TemplateSegmentModel).filter(TemplateSegmentModel.template_id == tpl.id).count()
assert c1 == 0
assert c2 == 0