Files
xiaoxia-saas/apps/api/app/schemas/edit_plan.py
T
API文档维护Agent 01f5541e14
Tests / test (pull_request) Failing after 0s
Tests / lint (pull_request) Failing after 0s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
fix: add foreign key constraints to all ORM models
- 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
2026-06-28 08:45:44 +08:00

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 = ""