style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
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 / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging 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
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 381h32m33s

This commit is contained in:
CI Bot
2026-08-31 09:50:22 +00:00
parent 1ee6e73d74
commit 2b3f1801d4
2 changed files with 14 additions and 26 deletions
@@ -28,16 +28,14 @@ def upgrade() -> None:
conn = op.get_bind()
# 找出有旧数据但没有新数据的 template_id
rows = conn.execute(
"""
rows = conn.execute("""
SELECT ts.id, ts.template_id, ts.segment_order, ts.duration_min, ts.duration_max, ts.material_type
FROM template_segments ts
WHERE ts.template_id NOT IN (
SELECT DISTINCT tcc.template_id FROM template_clip_configs tcc
)
ORDER BY ts.template_id, ts.segment_order
"""
)
""")
for row in rows:
config = {"material_type": row[5]} if row[5] else {}
+12 -22
View File
@@ -57,9 +57,7 @@ class TestCreateSegmentsWritesToClipConfigs:
repo.create_segments([seg])
# 验证 template_clip_configs 有记录
clips = db_session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == tpl.id
).all()
clips = db_session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == tpl.id).all()
assert len(clips) == 1
assert clips[0].order == 0
assert clips[0].min_duration == 3.0
@@ -74,9 +72,7 @@ class TestCreateSegmentsWritesToClipConfigs:
seg = _make_segment(tpl.id, 0)
repo.create_segments([seg])
old_rows = db_session.query(TemplateSegmentModel).filter(
TemplateSegmentModel.template_id == tpl.id
).all()
old_rows = db_session.query(TemplateSegmentModel).filter(TemplateSegmentModel.template_id == tpl.id).all()
assert len(old_rows) == 0
@@ -183,9 +179,7 @@ class TestDeleteSegments:
count = repo.delete_segments_by_template(tpl.id)
assert count == 1
clips = db_session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == tpl.id
).all()
clips = db_session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == tpl.id).all()
assert len(clips) == 0
def test_delete_template_clears_both_tables(self, repo: SQLAlchemyTemplateRepository, db_session: Session):
@@ -206,14 +200,10 @@ class TestDeleteSegments:
repo.delete(tpl.id, "user1")
clips = db_session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == tpl.id
).all()
clips = db_session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == tpl.id).all()
assert len(clips) == 0
old_rows = db_session.query(TemplateSegmentModel).filter(
TemplateSegmentModel.template_id == tpl.id
).all()
old_rows = db_session.query(TemplateSegmentModel).filter(TemplateSegmentModel.template_id == tpl.id).all()
assert len(old_rows) == 0
@@ -223,10 +213,12 @@ class TestCopyTemplateSegments:
def test_copy_preserves_segments(self, repo: SQLAlchemyTemplateRepository, db_session: Session):
tpl = _make_template()
repo.create(tpl)
repo.create_segments([
_make_segment(tpl.id, 0, "video"),
_make_segment(tpl.id, 1, "voiceover"),
])
repo.create_segments(
[
_make_segment(tpl.id, 0, "video"),
_make_segment(tpl.id, 1, "voiceover"),
]
)
copied = repo.copy_template(tpl.id, "user1", "copy")
assert len(copied.segments) == 2
@@ -234,9 +226,7 @@ class TestCopyTemplateSegments:
assert copied.segments[1].material_type == "voiceover"
# 验证新模板的 clip_configs 有数据
clips = db_session.query(TemplateClipConfigModel).filter(
TemplateClipConfigModel.template_id == copied.id
).all()
clips = db_session.query(TemplateClipConfigModel).filter(TemplateClipConfigModel.template_id == copied.id).all()
assert len(clips) == 2