56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Any, Dict, Generic, List, Optional, TypeVar, Union
|
|
|
|
T = TypeVar('T')
|
|
|
|
class StandardResponse(BaseModel, Generic[T]):
|
|
"""标准API响应模型"""
|
|
success: bool = Field(True, description="请求是否成功")
|
|
code: int = Field(200, description="业务状态码")
|
|
message: str = Field("操作成功", description="响应消息")
|
|
data: Optional[T] = Field(None, description="响应数据")
|
|
|
|
class PageInfo(BaseModel):
|
|
"""分页信息"""
|
|
page: int = Field(..., description="当前页码")
|
|
size: int = Field(..., description="每页大小")
|
|
total: int = Field(..., description="总记录数")
|
|
pages: int = Field(..., description="总页数")
|
|
|
|
class PagedResponse(BaseModel, Generic[T]):
|
|
"""分页响应数据"""
|
|
items: List[T] = Field(..., description="数据列表")
|
|
page_info: PageInfo = Field(..., description="分页信息")
|
|
|
|
class ErrorDetail(BaseModel):
|
|
"""错误详情"""
|
|
loc: List[str] = Field(..., description="错误位置")
|
|
msg: str = Field(..., description="错误消息")
|
|
type: str = Field(..., description="错误类型")
|
|
|
|
class ValidationError(BaseModel):
|
|
"""验证错误响应"""
|
|
detail: List[ErrorDetail]
|
|
|
|
class HealthCheck(BaseModel):
|
|
"""健康检查项目"""
|
|
status: str = Field(..., description="状态")
|
|
message: str = Field(..., description="消息")
|
|
|
|
class HealthCheckResponse(BaseModel):
|
|
"""健康检查响应"""
|
|
checks: Dict[str, HealthCheck] = Field(..., description="检查项目")
|
|
|
|
class TokenResponse(BaseModel):
|
|
"""令牌响应"""
|
|
access_token: str = Field(..., description="访问令牌")
|
|
token_type: str = Field("bearer", description="令牌类型")
|
|
expires_in: int = Field(..., description="过期时间(秒)")
|
|
|
|
class FileUploadResponse(BaseModel):
|
|
"""文件上传响应"""
|
|
file_id: str = Field(..., description="文件ID")
|
|
url: str = Field(..., description="文件URL")
|
|
file_name: str = Field(..., description="文件名")
|
|
content_type: str = Field(..., description="内容类型")
|
|
size: int = Field(..., description="文件大小(字节)") |