from typing import Any from fastapi.responses import JSONResponse # ---- ResponseNone 처리 ----------------------------------------------------- # 응답 객체에서 값이 None 인 필드를 재귀적으로 제거하여 페이로드를 줄인다. # 모든 라우터는 return RemoveNoneResponse(await service....) 형태로 반환한다. def RemoveNoneValues(obj: Any) -> Any: if isinstance(obj, dict): return {k: RemoveNoneValues(v) for k, v in obj.items() if v is not None} if isinstance(obj, list): return [RemoveNoneValues(v) for v in obj] return obj def RemoveNoneResponse(obj) -> JSONResponse: # mode="json": datetime/uuid 등을 JSON-safe 문자열로 변환(표준 JSONResponse 가 직렬화 가능). # (ORJSONResponse 는 최신 FastAPI 에서 deprecated) return JSONResponse(content=RemoveNoneValues(obj.model_dump(mode="json")))