53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
"""
|
||
文档解析模块的数据模型
|
||
"""
|
||
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="文件信息")
|