"""PDF 转换接口 DTO。""" from __future__ import annotations from datetime import datetime from pydantic import BaseModel, Field class PdfJobOut(BaseModel): """任务对外视图(用户与管理页共用,user_deleted 仅管理页关注)。""" id: int source_filename: str = Field(..., description="原始上传文件名") source_size: int = Field(..., description="原始文件字节数") status: str = Field(..., description="pending / converting / done / failed") progress: int = Field(0, description="转换进度 0-100") error_message: str = Field("", description="失败原因") user_deleted: bool = Field(False, description="用户是否已软删(管理页用)") deleted_at: datetime | None = Field(None, description="用户软删时间(管理页用)") created_at: datetime updated_at: datetime model_config = {"from_attributes": True} class PdfJobListResponse(BaseModel): """任务列表响应。""" total: int items: list[PdfJobOut] class PdfSubmitResponse(BaseModel): """提交转换任务的响应。""" job: PdfJobOut = Field(..., description="新建的任务") set_cookie: bool = Field( False, description="true=本次请求未带 cookie,响应已下发新 cookie" ) class DeleteResult(BaseModel): deleted: bool