from typing import Optional from pydantic import BaseModel, Field from common.enums import ErrorType class StructModel: """프로토콜/구조체 식별용 마커 클래스. (backend 와 동일 규약)""" pass class ErrorInfo(BaseModel, StructModel): """모든 응답에 공통으로 실리는 결과 정보. result.success / code / desc 로 내려간다.""" success: Optional[bool] = True code: Optional[int] = ErrorType.SUCCESS.value desc: Optional[str] = ErrorType.SUCCESS.name def SetResult(self, enum: ErrorType): if enum is not None: self.success = ErrorType.SUCCESS.value == enum.value self.code = enum.value self.desc = enum.name # ---- Protocol 규약 (backend/common/models/gmodel.py 와 동일) ---------------- # 모든 통신 패킷은 WebPacketProtocol 을 상속한다. # 요청 : Req_xxx (WebPacketProtocol) / 응답 : Res_xxx (Res_WebPacketProtocol, 항상 result) class WebPacketProtocol(BaseModel, StructModel): pass class Req_WebPacketProtocol(WebPacketProtocol): pass class Res_WebPacketProtocol(WebPacketProtocol): # default_factory 로 인스턴스마다 새 ErrorInfo 를 생성한다 (mutable default 공유 방지). result: ErrorInfo = Field(default_factory=ErrorInfo) msg: Optional[str] = None