aidress/app/schemas/common.py
2025-03-21 22:49:03 +08:00

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="文件大小(字节)")