42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
"""
|
|
通用数据模型
|
|
"""
|
|
from typing import Optional, List
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
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(default_factory=list, description="字段列表")
|
|
field_count: int = Field(0, description="字段数量")
|
|
row_count: Optional[int] = Field(None, description="行数(如果已知)")
|
|
source_file: Optional[str] = Field(None, description="来源文件")
|
|
|
|
|
|
class PaginationParams(BaseModel):
|
|
"""分页参数"""
|
|
page: int = Field(1, ge=1, description="页码")
|
|
page_size: int = Field(20, ge=1, le=100, description="每页数量")
|
|
|
|
|
|
class PaginationResponse(BaseModel):
|
|
"""分页响应"""
|
|
total: int = Field(..., description="总数量")
|
|
page: int = Field(..., description="当前页码")
|
|
page_size: int = Field(..., description="每页数量")
|
|
total_pages: int = Field(..., description="总页数")
|