from typing import Literal, Optional from pydantic import BaseModel, Field # ------------------------------------------------------------------ # # 导出请求 / 响应 # ------------------------------------------------------------------ # class ExportDocRequest(BaseModel): user_id: str = Field(..., alias="userId", description="当前用户 ID") file_name: str = Field(..., alias="fileName", max_length=255, description="文件名(不含扩展名)") format: Literal["doc"] = Field(..., description="阶段 0 固定为 doc") content: str = Field(..., description="文档当前内容(Markdown)") document_id: Optional[str] = Field(None, alias="documentId", description="关联文档 ID,传入时同步更新草稿") style_id: Optional[str] = Field(None, alias="styleId", description="样式 ID;不传时使用默认样式") model_config = {"populate_by_name": True} class ExportDocResponse(BaseModel): record_id: str = Field(..., serialization_alias="recordId") download_url: str = Field(..., serialization_alias="downloadUrl") file_name: str = Field(..., serialization_alias="fileName") style_id: str = Field(..., serialization_alias="styleId", description="实际使用的样式 ID") warning: Optional[str] = Field(None, serialization_alias="warning", description="存储超限时的警告信息") model_config = {"populate_by_name": True} # ------------------------------------------------------------------ # # 导出记录 # ------------------------------------------------------------------ # class ExportRecordSchema(BaseModel): record_id: str = Field(..., serialization_alias="recordId") user_id: str = Field(..., serialization_alias="userId") file_name: str = Field(..., serialization_alias="fileName") file_size: int = Field(..., serialization_alias="fileSize") download_url: str = Field(..., serialization_alias="downloadUrl") document_id: Optional[str] = Field(None, serialization_alias="documentId") style_id: str = Field(..., serialization_alias="styleId") created_at: int = Field(..., serialization_alias="createdAt", description="Unix 毫秒时间戳") model_config = {"populate_by_name": True} class PaginationSchema(BaseModel): page: int page_size: int = Field(..., serialization_alias="pageSize") total: int total_pages: int = Field(..., serialization_alias="totalPages") model_config = {"populate_by_name": True} class ExportRecordListResponse(BaseModel): records: list[ExportRecordSchema] pagination: PaginationSchema