| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- from __future__ import annotations
- from typing import TYPE_CHECKING, Literal, Optional
- from pydantic import BaseModel, Field
- if TYPE_CHECKING:
- from app.models.export_record import ExportRecord
- # ------------------------------------------------------------------ #
- # 导出请求 / 响应
- # ------------------------------------------------------------------ #
- 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}
- @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
|