46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import time
|
||
from typing import Generic, TypeVar, Union
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
from loveace.router.schemas.model import ErrorModel, ValidationErrorModel
|
||
|
||
T = TypeVar("T")
|
||
|
||
|
||
class UniResponseModel(BaseModel, Generic[T]):
|
||
"""
|
||
统一响应模型,适用于所有API响应。
|
||
Attributes:
|
||
success (bool): 操作是否成功。
|
||
message (str | None): 操作的详细信息。
|
||
data (ResponseModel | None): 操作返回的数据。
|
||
error (DetailModel | None): 操作错误信息,支持 ErrorModel 或 ValidationErrorDetail。
|
||
timestamp (str): 响应生成的时间戳,格式为 "YYYY-MM-DD HH:MM:SS"。
|
||
"""
|
||
|
||
success: bool = Field(..., description="操作是否成功")
|
||
message: str | None = Field(..., description="操作的详细信息")
|
||
data: T | None = Field(..., description="操作返回的数据")
|
||
error: Union[ErrorModel, ValidationErrorModel] | None = Field(
|
||
None, description="操作错误信息"
|
||
)
|
||
timestamp: str = Field(
|
||
default_factory=lambda: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||
description="响应生成的时间戳",
|
||
)
|
||
|
||
@classmethod
|
||
def from_response(
|
||
cls,
|
||
success: bool,
|
||
message: str,
|
||
data: T | None = None,
|
||
) -> "UniResponseModel":
|
||
return cls(
|
||
success=success,
|
||
message=message,
|
||
data=data,
|
||
error=None,
|
||
)
|