export.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from __future__ import annotations
  2. from typing import TYPE_CHECKING, Optional
  3. from pydantic import BaseModel, Field
  4. if TYPE_CHECKING:
  5. from app.models.export_record import ExportRecord
  6. # ------------------------------------------------------------------ #
  7. # 导出请求 / 响应
  8. # ------------------------------------------------------------------ #
  9. class ExportDocRequest(BaseModel):
  10. document_id: str = Field(..., alias="documentId")
  11. style_id: Optional[str] = Field(None, alias="styleId")
  12. model_config = {"populate_by_name": True}
  13. class ExportDocResponse(BaseModel):
  14. record_id: str = Field(..., serialization_alias="recordId")
  15. download_url: str = Field(..., serialization_alias="downloadUrl")
  16. file_name: str = Field(..., serialization_alias="fileName")
  17. style_id: str = Field(..., serialization_alias="styleId")
  18. warning: Optional[str] = Field(None, serialization_alias="warning")
  19. model_config = {"populate_by_name": True}
  20. # ------------------------------------------------------------------ #
  21. # 导出记录
  22. # ------------------------------------------------------------------ #
  23. class ExportRecordSchema(BaseModel):
  24. record_id: str = Field(..., serialization_alias="recordId")
  25. user_id: str = Field(..., serialization_alias="userId")
  26. file_name: str = Field(..., serialization_alias="fileName")
  27. file_size: int = Field(..., serialization_alias="fileSize")
  28. download_url: str = Field(..., serialization_alias="downloadUrl")
  29. document_id: Optional[str] = Field(None, serialization_alias="documentId")
  30. style_id: str = Field(..., serialization_alias="styleId")
  31. created_at: int = Field(..., serialization_alias="createdAt")
  32. model_config = {"populate_by_name": True}
  33. @classmethod
  34. def from_record(cls, r: "ExportRecord") -> "ExportRecordSchema":
  35. return cls(
  36. record_id=r.id,
  37. user_id=r.user_id,
  38. file_name=r.file_name,
  39. file_size=r.file_size,
  40. download_url=r.download_url,
  41. document_id=r.document_id,
  42. style_id=r.style_id,
  43. created_at=int(r.created_at.timestamp() * 1000),
  44. )
  45. class PaginationSchema(BaseModel):
  46. page: int
  47. page_size: int = Field(..., serialization_alias="pageSize")
  48. total: int
  49. total_pages: int = Field(..., serialization_alias="totalPages")
  50. model_config = {"populate_by_name": True}
  51. class ExportRecordListResponse(BaseModel):
  52. records: list[ExportRecordSchema]
  53. pagination: PaginationSchema