from __future__ import annotations from typing import TYPE_CHECKING, Optional from pydantic import BaseModel, Field if TYPE_CHECKING: from app.models.export_record import ExportRecord # ------------------------------------------------------------------ # # 导出请求 / 响应 # ------------------------------------------------------------------ # class ExportDocRequest(BaseModel): document_id: str = Field(..., alias="documentId") style_id: Optional[str] = Field(None, alias="styleId") 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") warning: Optional[str] = Field(None, serialization_alias="warning") 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") model_config = {"populate_by_name": True} @classmethod def from_record(cls, r: "ExportRecord") -> "ExportRecordSchema": return cls( record_id=r.id, user_id=r.user_id, file_name=r.file_name, file_size=r.file_size, download_url=r.download_url, document_id=r.document_id, style_id=r.style_id, created_at=int(r.created_at.timestamp() * 1000), ) 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