67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
"""
|
|
业务表解析模块的数据模型
|
|
"""
|
|
from typing import Optional, List
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# ==================== 请求模型 ====================
|
|
|
|
class ParseBusinessTablesRequest(BaseModel):
|
|
"""业务表解析请求"""
|
|
file_paths: List[str] = Field(..., min_items=1, description="文件路径列表")
|
|
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="字段注释")
|
|
inferred_type: 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="表描述")
|
|
source_file: str = Field(..., description="来源文件")
|
|
fields: List[FieldInfo] = Field(..., description="字段列表")
|
|
field_count: int = Field(..., ge=0, description="字段数量")
|
|
row_count: Optional[int] = Field(None, description="行数")
|
|
|
|
|
|
class ProcessedFile(BaseModel):
|
|
"""已处理的文件信息"""
|
|
file_name: str = Field(..., description="文件名")
|
|
file_size: int = Field(..., ge=0, description="文件大小(字节)")
|
|
tables_extracted: int = Field(..., ge=0, description="提取的表数")
|
|
status: str = Field(..., description="处理状态")
|
|
|
|
|
|
class FailedFile(BaseModel):
|
|
"""失败的文件信息"""
|
|
file_name: str = Field(..., description="文件名")
|
|
error: str = Field(..., description="错误信息")
|
|
|
|
|
|
class FileInfo(BaseModel):
|
|
"""文件信息汇总"""
|
|
processed_files: List[ProcessedFile] = Field(..., description="已处理的文件列表")
|
|
|
|
|
|
class ParseBusinessTablesResponse(BaseModel):
|
|
"""业务表解析响应"""
|
|
tables: List[TableInfo] = Field(..., description="解析出的表列表")
|
|
total_tables: int = Field(..., ge=0, description="总表数")
|
|
total_fields: int = Field(..., ge=0, description="总字段数")
|
|
total_files: int = Field(..., ge=0, description="总文件数")
|
|
success_files: int = Field(..., ge=0, description="成功处理的文件数")
|
|
failed_files: List[FailedFile] = Field(default_factory=list, description="失败的文件列表")
|
|
parse_time: float = Field(..., ge=0, description="解析耗时(秒)")
|
|
file_info: FileInfo = Field(..., description="文件信息汇总")
|