01f5541e14
- Add 35 ForeignKey constraints across 15 tables (was zero) - ON DELETE CASCADE for parent-child relationships (project → children) - ON DELETE SET NULL for optional user references (created_by, assignee, etc.) - Add relationship() with back_populates and cascade on all models - Alter 11 columns from nullable=False to nullable=True for SET NULL - Add 2 missing indexes on FK columns (assets.uploaded_by_user_id, project_titles.created_by_user_id) - Update Pydantic response models to accept str | None for nullable fields - Add Alembic migration 010 with complete upgrade/downgrade Closes #17
61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class EditTemplateResponse(BaseModel):
|
|
id: str
|
|
project_id: str
|
|
name: str
|
|
description: str
|
|
target_duration: float
|
|
clip_count: int
|
|
is_active: bool
|
|
created_at: datetime | None = None
|
|
|
|
|
|
class EditPlanClipResponse(BaseModel):
|
|
id: str
|
|
asset_id: str
|
|
asset_name: str
|
|
sequence: int
|
|
start_time: float
|
|
duration: float
|
|
reason: str
|
|
layer: str = "main" # main, pip, broll
|
|
|
|
|
|
class EditPlanResponse(BaseModel):
|
|
id: str
|
|
project_id: str
|
|
template_id: str
|
|
asset_library_id: str
|
|
title_id: str | None = ""
|
|
status: str
|
|
summary: str
|
|
editing_mode: str | None = None # one_take, pip, voice_over, voice_pip
|
|
clips: list[EditPlanClipResponse] = Field(default_factory=list)
|
|
created_at: datetime | None = None
|
|
updated_at: datetime | None = None
|
|
|
|
|
|
class CreateEditPlanRequest(BaseModel):
|
|
asset_library_id: str
|
|
template_id: str = ""
|
|
title_id: str = ""
|
|
|
|
|
|
class AutoGenerateEditPlanRequest(BaseModel):
|
|
"""智能生成剪辑计划请求"""
|
|
asset_library_id: str
|
|
editing_mode: str = Field(
|
|
default="one_take",
|
|
description="剪辑模式: one_take, pip, voice_over, voice_pip"
|
|
)
|
|
target_duration: float = Field(
|
|
default=30.0,
|
|
description="目标时长(秒)"
|
|
)
|
|
template_id: str = ""
|
|
title_id: str = ""
|