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