feat(plans): add edit plan preview workflow

This commit is contained in:
Xiaoxia AI
2026-06-24 10:10:25 +08:00
parent 07c62b0b30
commit 0f59b412bc
16 changed files with 460 additions and 5 deletions
@@ -16,6 +16,7 @@ class SQLAlchemyGenerationTaskRepository:
strategy_id=task.strategy_id,
asset_library_id=task.asset_library_id,
voice_library_id=task.voice_library_id,
edit_plan_id=task.edit_plan_id,
status=task.status.value,
progress=task.progress,
result_count=task.result_count,
@@ -40,6 +41,7 @@ class SQLAlchemyGenerationTaskRepository:
strategy_id=model.strategy_id,
asset_library_id=model.asset_library_id,
voice_library_id=model.voice_library_id,
edit_plan_id=getattr(model, "edit_plan_id", "") or "",
status=GenerationTaskStatus(model.status),
progress=model.progress,
result_count=int(model.result_count or 0),
@@ -58,6 +60,8 @@ class SQLAlchemyGenerationTaskRepository:
model = self.session.query(GenerationTaskModel).filter(GenerationTaskModel.id == task.id).first()
if model is None:
raise ValueError(f"GenerationTask {task.id} not found")
model.voice_library_id = task.voice_library_id
model.edit_plan_id = task.edit_plan_id
model.status = task.status.value
model.progress = task.progress
model.result_count = task.result_count
@@ -131,6 +131,50 @@ class ProjectTitleModel(Base):
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
class EditTemplateModel(Base):
__tablename__ = "edit_templates"
id = Column(String(32), primary_key=True)
workspace_id = Column(String(32), nullable=False, index=True)
project_id = Column(String(32), nullable=False, index=True)
name = Column(String(120), nullable=False)
description = Column(Text, nullable=False, default="")
target_duration = Column(Float, nullable=False, default=30)
clip_count = Column(Integer, nullable=False, default=3)
is_active = Column(Boolean, nullable=False, default=True)
created_by_user_id = Column(String(32), nullable=False, default="")
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
class EditPlanModel(Base):
__tablename__ = "edit_plans"
id = Column(String(32), primary_key=True)
workspace_id = Column(String(32), nullable=False, index=True)
project_id = Column(String(32), nullable=False, index=True)
template_id = Column(String(32), nullable=False, index=True)
asset_library_id = Column(String(32), nullable=False, index=True)
title_id = Column(String(32), nullable=False, default="")
status = Column(String(20), nullable=False, default="draft", index=True)
summary = Column(Text, nullable=False, default="")
created_by_user_id = Column(String(32), nullable=False, default="")
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
class EditPlanClipModel(Base):
__tablename__ = "edit_plan_clips"
id = Column(String(32), primary_key=True)
edit_plan_id = Column(String(32), nullable=False, index=True)
asset_id = Column(String(32), nullable=False, index=True)
sequence = Column(Integer, nullable=False)
start_time = Column(Float, nullable=False, default=0)
duration = Column(Float, nullable=False, default=0)
reason = Column(Text, nullable=False, default="")
class IngestJobModel(Base):
__tablename__ = "ingest_jobs"
@@ -170,6 +214,7 @@ class GenerationTaskModel(Base):
strategy_id = Column(String(32), nullable=False, default="")
asset_library_id = Column(String(32), nullable=False, index=True)
voice_library_id = Column(String(32), nullable=False, default="")
edit_plan_id = Column(String(32), nullable=False, default="", index=True)
status = Column(String(20), nullable=False, default="pending", index=True)
progress = Column(Float, nullable=False, default=0.0)
result_count = Column(Float, nullable=False, default=0)