"""Script (口播文案库) Pydantic schemas — Issue #1795 & #1894.""" from __future__ import annotations from datetime import datetime from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class ScriptSegment(BaseModel): """单段文案.""" text: str duration: Optional[float] = None class ScriptResponse(BaseModel): id: str user_id: str title: str content: str segments: List[ScriptSegment] = Field(default_factory=list) tags: List[str] = Field(default_factory=list) # #1894: 标题配置字段 title_text: str = "" title_category: str = "" title_config: Dict[str, Any] = Field(default_factory=dict) created_at: datetime updated_at: datetime class ScriptListResponse(BaseModel): items: list[ScriptResponse] total: int = 0 class CreateScriptRequest(BaseModel): title: str = Field(..., min_length=1, max_length=255) content: str = "" segments: List[ScriptSegment] = Field(default_factory=list) tags: List[str] = Field(default_factory=list) # #1894: 标题配置字段 title_text: str = "" title_category: str = "" title_config: Dict[str, Any] = Field(default_factory=dict) class UpdateScriptRequest(BaseModel): title: Optional[str] = Field(None, min_length=1, max_length=255) content: Optional[str] = None segments: Optional[List[ScriptSegment]] = None tags: Optional[List[str]] = None # #1894: 标题配置字段 title_text: Optional[str] = None title_category: Optional[str] = None title_config: Optional[Dict[str, Any]] = None