"""
基础API模型模块
包含通用的API请求和响应的数据模型
"""

from typing import Optional, Any, Generic, TypeVar, Dict, List
from pydantic import BaseModel, Field

# 定义泛型类型变量
T = TypeVar('T')

class ApiResponse(BaseModel, Generic[T]):
    """
    标准API响应模型
    适用于所有API响应
    
    Args:
        code: 状态码
        message: 响应消息
        data: 响应数据
    """
    code: int = Field(200, description="状态码,200表示成功")
    message: str = Field("操作成功", description="响应消息")
    data: Optional[T] = Field(None, description="响应数据")

class PaginationParams(BaseModel):
    """
    分页查询参数
    适用于所有需要分页的接口
    """
    pageNum: int = Field(1, ge=1, description="页码,默认为1")
    pageSize: int = Field(10, ge=1, le=100, description="每页记录数,默认为10")

class SortParams(BaseModel):
    """
    排序参数
    适用于所有需要排序的接口
    """
    sortField: Optional[str] = Field(None, description="排序字段")
    sortOrder: str = Field("desc", description="排序方式:asc(升序)、desc(降序)")

class PageResult(BaseModel, Generic[T]):
    """
    分页结果模型
    适用于所有返回分页数据的接口
    """
    total: int = Field(..., description="总记录数")
    list: List[T] = Field(..., description="数据列表")
    pageNum: int = Field(..., description="当前页码")
    pageSize: int = Field(..., description="每页记录数")
    totalPages: int = Field(..., description="总页数")