export.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from typing import Literal, Optional
  2. from pydantic import BaseModel, Field
  3. # ------------------------------------------------------------------ #
  4. # 导出请求 / 响应
  5. # ------------------------------------------------------------------ #
  6. class ExportDocRequest(BaseModel):
  7. user_id: str = Field(..., alias="userId", description="当前用户 ID")
  8. file_name: str = Field(..., alias="fileName", max_length=255, description="文件名(不含扩展名)")
  9. format: Literal["doc"] = Field(..., description="阶段 0 固定为 doc")
  10. content: str = Field(..., description="文档当前内容(Markdown)")
  11. document_id: Optional[str] = Field(None, alias="documentId", description="关联文档 ID,传入时同步更新草稿")
  12. style_id: Optional[str] = Field(None, alias="styleId", description="样式 ID;不传时使用默认样式")
  13. model_config = {"populate_by_name": True}
  14. class ExportDocResponse(BaseModel):
  15. record_id: str = Field(..., serialization_alias="recordId")
  16. download_url: str = Field(..., serialization_alias="downloadUrl")
  17. file_name: str = Field(..., serialization_alias="fileName")
  18. style_id: str = Field(..., serialization_alias="styleId", description="实际使用的样式 ID")
  19. warning: Optional[str] = Field(None, serialization_alias="warning", description="存储超限时的警告信息")
  20. model_config = {"populate_by_name": True}
  21. # ------------------------------------------------------------------ #
  22. # 导出记录
  23. # ------------------------------------------------------------------ #
  24. class ExportRecordSchema(BaseModel):
  25. record_id: str = Field(..., serialization_alias="recordId")
  26. user_id: str = Field(..., serialization_alias="userId")
  27. file_name: str = Field(..., serialization_alias="fileName")
  28. file_size: int = Field(..., serialization_alias="fileSize")
  29. download_url: str = Field(..., serialization_alias="downloadUrl")
  30. document_id: Optional[str] = Field(None, serialization_alias="documentId")
  31. style_id: str = Field(..., serialization_alias="styleId")
  32. created_at: int = Field(..., serialization_alias="createdAt", description="Unix 毫秒时间戳")
  33. model_config = {"populate_by_name": True}
  34. class PaginationSchema(BaseModel):
  35. page: int
  36. page_size: int = Field(..., serialization_alias="pageSize")
  37. total: int
  38. total_pages: int = Field(..., serialization_alias="totalPages")
  39. model_config = {"populate_by_name": True}
  40. class ExportRecordListResponse(BaseModel):
  41. records: list[ExportRecordSchema]
  42. pagination: PaginationSchema