# app/utils/response.py from app.schemas.common import ApiResponse from typing import Any from pydantic import BaseModel def _to_serializable(data: Any): """自动将 ORM / Pydantic / list 转换为可序列化对象""" if isinstance(data, BaseModel): return data.dict() if hasattr(data, "__table__"): # SQLAlchemy ORM return { c.name: getattr(data, c.name) for c in data.__table__.columns } if isinstance(data, list): return [_to_serializable(i) for i in data] return data def success(data=None, message: str = "success"): return ApiResponse( code=0, message=message, data=_to_serializable(data) ) def fail(message: str, code: int = 1): return ApiResponse( code=code, message=message, data=None )