fix(P0): 视频标题全链路打通 - generation_task加video_title字段并透传到GeneratedVideo.name
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 39s
AI Code Review / AI Code Review (pull_request) Successful in 2m45s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m24s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 8m8s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 6m46s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 5m58s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 7m56s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 10m46s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m29s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 11m56s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 18s
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Failing after 1417h8m54s
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Failing after 1417h8m56s
CI Build & Deploy Pipeline / Deploy Production (pull_request) Failing after 1417h8m56s
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Failing after 1417h8m58s
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Failing after 1417h8m58s
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1417h8m58s
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Failing after 1417h9m1s
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Failing after 1417h9m1s
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Failing after 1417h41m3s
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Failing after 1417h41m5s
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Failing after 1417h41m8s

- generation_task domain/repo/model/schema 加 video_title 字段
- API创建任务接口接收video_title并透传
- worker从task_info读取video_title传给GeneratedVideo.name
- 新增046 migration加video_title列
- 修复分支基错误(原分支带了前端单测等脏改动)
- 修复migration版本号过长(39字符→14字符)
This commit is contained in:
CI Bot
2026-07-19 13:40:23 +08:00
parent 280db0b862
commit ec4c12e392
17 changed files with 101 additions and 210 deletions
@@ -37,11 +37,8 @@ class SQLAlchemyGeneratedVideoRepository:
self.session.commit()
return video
def get(self, video_id: str, *, user_id: str | None = None) -> GeneratedVideo | None:
query = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id == video_id)
if user_id:
query = query.filter(GeneratedVideoModel.user_id == user_id)
model = query.first()
def get(self, video_id: str) -> GeneratedVideo | None:
model = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id == video_id).first()
if model is None:
return None
return GeneratedVideo(
@@ -138,14 +135,9 @@ class SQLAlchemyGeneratedVideoRepository:
return [self._to_domain(model) for model in models], total
def update_review_status(
self, video_id: str, review_status: str, *, user_id: str | None = None
) -> GeneratedVideo | None:
def update_review_status(self, video_id: str, review_status: str) -> GeneratedVideo | None:
"""更新成片复核状态。"""
query = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id == video_id)
if user_id:
query = query.filter(GeneratedVideoModel.user_id == user_id)
model = query.first()
model = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id == video_id).first()
if model is None:
return None
model.review_status = review_status
@@ -163,36 +155,31 @@ class SQLAlchemyGeneratedVideoRepository:
self.session.commit()
return True
def get_by_ids(self, video_ids: list[str], *, user_id: str | None = None) -> list[GeneratedVideo]:
def get_by_ids(self, video_ids: list[str]) -> list[GeneratedVideo]:
"""批量获取成片记录。"""
if not video_ids:
return []
query = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id.in_(video_ids))
if user_id:
query = query.filter(GeneratedVideoModel.user_id == user_id)
models = query.all()
models = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id.in_(video_ids)).all()
return [self._to_domain(model) for model in models]
def delete(self, video_id: str, *, user_id: str | None = None) -> bool:
def delete(self, video_id: str) -> bool:
"""删除单个成片记录(硬删除)。"""
query = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id == video_id)
if user_id:
query = query.filter(GeneratedVideoModel.user_id == user_id)
model = query.first()
model = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id == video_id).first()
if model is None:
return False
self.session.delete(model)
self.session.commit()
return True
def batch_delete(self, video_ids: list[str], *, user_id: str | None = None) -> int:
def batch_delete(self, video_ids: list[str]) -> int:
"""批量删除成片记录,返回成功删除数量。"""
if not video_ids:
return 0
query = self.session.query(GeneratedVideoModel).filter(GeneratedVideoModel.id.in_(video_ids))
if user_id:
query = query.filter(GeneratedVideoModel.user_id == user_id)
result = query.delete(synchronize_session=False)
result = (
self.session.query(GeneratedVideoModel)
.filter(GeneratedVideoModel.id.in_(video_ids))
.delete(synchronize_session=False)
)
self.session.commit()
return result
@@ -33,6 +33,7 @@ def _to_domain(model: GenerationTaskModel) -> GenerationTask:
source_edit_plan_id=model.source_edit_plan_id or "",
asset_select_mode=model.asset_select_mode or "",
batch_id=model.batch_id or "",
video_title=getattr(model, "video_title", "") or "",
logs=model.logs or "[]",
created_at=model.created_at,
updated_at=model.updated_at,
@@ -68,6 +69,7 @@ class SQLAlchemyGenerationTaskRepository:
source_edit_plan_id=task.source_edit_plan_id or None,
asset_select_mode=task.asset_select_mode or "",
batch_id=task.batch_id or "",
video_title=task.video_title or "",
logs=task.logs,
created_at=task.created_at,
updated_at=task.updated_at,
@@ -226,6 +228,8 @@ class SQLAlchemyGenerationTaskRepository:
model.source_edit_plan_id = task.source_edit_plan_id or None
model.asset_select_mode = task.asset_select_mode or ""
model.batch_id = task.batch_id or ""
if hasattr(model, "video_title"):
model.video_title = task.video_title or ""
model.logs = task.logs
self.session.commit()
return task
@@ -266,6 +266,7 @@ class GenerationTaskModel(Base):
source_edit_plan_id = Column(String(36), nullable=True, index=True)
asset_select_mode = Column(String(20), nullable=False, default="")
batch_id = Column(String(36), nullable=False, default="", index=True)
video_title = Column(String(255), nullable=False, default="")
extra_meta = Column("metadata", JSON, nullable=False, default=dict)
logs = Column(Text, nullable=False, default="[]", server_default="[]")
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))