""" 文档解析模块的数据模型 """ from typing import Optional, List from pydantic import BaseModel, Field # ==================== 请求模型 ==================== class ParseDocumentRequest(BaseModel): """文档解析请求""" file_path: str = Field(..., description="文件路径") file_type: Optional[str] = Field(None, description="文件类型:excel/word/pdf") project_id: str = Field(..., description="项目ID") # ==================== 响应模型 ==================== class FieldInfo(BaseModel): """字段信息""" raw_name: str = Field(..., description="字段名(英文/原始名称)") display_name: Optional[str] = Field(None, description="字段显示名称(中文)") type: str = Field(..., description="字段类型") comment: Optional[str] = Field(None, description="字段注释") is_primary_key: bool = Field(False, description="是否主键") is_nullable: bool = Field(True, description="是否可为空") default_value: Optional[str] = Field(None, description="默认值") class TableInfo(BaseModel): """表信息""" raw_name: str = Field(..., description="表名(英文/原始名称)") display_name: Optional[str] = Field(None, description="表显示名称(中文)") description: Optional[str] = Field(None, description="表描述") fields: List[FieldInfo] = Field(..., description="字段列表") field_count: int = Field(..., ge=0, description="字段数量") class FileInfo(BaseModel): """文件信息""" file_name: str = Field(..., description="文件名") file_size: int = Field(..., ge=0, description="文件大小(字节)") file_type: str = Field(..., description="文件类型") class ParseDocumentResponse(BaseModel): """文档解析响应""" tables: List[TableInfo] = Field(..., description="解析出的表列表") total_tables: int = Field(..., ge=0, description="总表数") total_fields: int = Field(..., ge=0, description="总字段数") parse_time: float = Field(..., ge=0, description="解析耗时(秒)") file_info: FileInfo = Field(..., description="文件信息")