from enum import Enum, auto from fastapi import HTTPException class ErrorType(Enum): """서버 전역 결과 코드. Res_WebPacketProtocol.result 에 담겨 클라이언트로 전달된다. HTTP status 와 겹치지 않도록 구간을 분리해서 관리한다. 도메인 로직이 생기면 각 구간(예: 1500~ LPS 전용)을 이어서 추가한다. """ SUCCESS = 0 FAIL = 1 # DB 에러 DB_RUN_FAILED = 10 DB_ALREADY_SAME_KEY = auto() DB_INVALID_KEY = auto() DB_EMPTY_DATA = auto() DB_INVALID_TYPE = auto() # 요청/직렬화 에러 JSON_PARSE_ERROR = 100 INVALID_REQUEST_DATA = auto() INTERNAL_EXCEPTION = auto() # http 에러 코드와 겹치지 않게 설정 - router 전용 예외 발생 옵션 HTTP_INVALID_CLIENT_REQUEST = 419 HTTP_TO_MANY_REQUEST = 429 HTTP_INVALID_CLIENT_ACCESS = 433 # ErrorType 의 HTTP_* 값과 status_code 를 맞춰 router 단에서 raise 한다. EXCEPTION_INVALID_CLIENT_REQUEST = HTTPException(status_code=ErrorType.HTTP_INVALID_CLIENT_REQUEST.value, detail=ErrorType.HTTP_INVALID_CLIENT_REQUEST.name) EXCEPTION_TO_MANY_REQUEST = HTTPException(status_code=ErrorType.HTTP_TO_MANY_REQUEST.value, detail=ErrorType.HTTP_TO_MANY_REQUEST.name) EXCEPTION_INVALID_CLIENT_ACCESS = HTTPException(status_code=ErrorType.HTTP_INVALID_CLIENT_ACCESS.value, detail=ErrorType.HTTP_INVALID_CLIENT_ACCESS.name) class DBType(Enum): """논리 DB 식별자. 물리적으로 같은 DB 라도 도메인별로 논리 구분한다. DB 가 늘어나면 여기에 추가하고 db_session_manager 의 엔진 맵에도 등록한다. """ MAIN = 1 # LPS 기본 DB class DBWRType(Enum): """Read/Write 분리. 조회는 READ(복제), 변경은 WRITE(주 DB).""" DB_READ = 1 DB_WRITE = 2