""" Brief 相关 Schema """ from typing import Optional, List from datetime import datetime from pydantic import BaseModel, Field # ===== 请求 ===== class BriefCreateRequest(BaseModel): """创建/更新 Brief 请求""" file_url: Optional[str] = None file_name: Optional[str] = None selling_points: Optional[List[dict]] = None blacklist_words: Optional[List[dict]] = None competitors: Optional[List[str]] = None brand_tone: Optional[str] = None min_duration: Optional[int] = None max_duration: Optional[int] = None other_requirements: Optional[str] = None attachments: Optional[List[dict]] = None agency_attachments: Optional[List[dict]] = None class BriefUpdateRequest(BaseModel): """更新 Brief 请求""" file_url: Optional[str] = None file_name: Optional[str] = None selling_points: Optional[List[dict]] = None blacklist_words: Optional[List[dict]] = None competitors: Optional[List[str]] = None brand_tone: Optional[str] = None min_duration: Optional[int] = None max_duration: Optional[int] = None other_requirements: Optional[str] = None attachments: Optional[List[dict]] = None agency_attachments: Optional[List[dict]] = None class AgencyBriefUpdateRequest(BaseModel): """代理商更新 Brief 请求(仅允许更新 agency_attachments)""" agency_attachments: Optional[List[dict]] = None # ===== 响应 ===== class BriefResponse(BaseModel): """Brief 响应""" id: str project_id: str project_name: Optional[str] = None file_url: Optional[str] = None file_name: Optional[str] = None selling_points: Optional[List[dict]] = None blacklist_words: Optional[List[dict]] = None competitors: Optional[List[str]] = None brand_tone: Optional[str] = None min_duration: Optional[int] = None max_duration: Optional[int] = None other_requirements: Optional[str] = None attachments: Optional[List[dict]] = None agency_attachments: Optional[List[dict]] = None created_at: datetime updated_at: datetime class Config: from_attributes = True