71 lines
2.9 KiB
Python
71 lines
2.9 KiB
Python
from enum import Enum, auto
|
|
|
|
from fastapi import HTTPException
|
|
|
|
|
|
class ErrorType(Enum):
|
|
"""서버 전역 결과 코드. backend/common/enums.py 와 구간을 공유하되,
|
|
협상 에이전트 전용 코드를 2000 구간에 추가한다.
|
|
"""
|
|
|
|
SUCCESS = 0
|
|
FAIL = 1
|
|
|
|
# DB / Redis 에러
|
|
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
|
|
HTTP_ACCESS_TOKEN_EXPIRED = 434
|
|
HTTP_REFRESH_TOKEN_EXPIRED = 435
|
|
HTTP_INVALID_TOKEN_ACCESS = 436
|
|
|
|
# 테넌트 라우팅 에러 (P4 tenant_middleware)
|
|
TENANT_HEADER_MISSING = 1400 # X-Tenant-ID 부재 -> 400
|
|
TENANT_NOT_REGISTERED = auto() # 미등록 테넌트 -> 404
|
|
|
|
# 협상 에이전트 에러
|
|
NEGO_INVALID_STEP = 2000
|
|
NEGO_SESSION_NOT_FOUND = auto()
|
|
NEGO_QTABLE_NOT_LOADED = auto()
|
|
NEGO_DIM_MISMATCH = auto() # state/action 차원 불일치 (warm-start 폴백 트리거)
|
|
|
|
|
|
# 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)
|
|
EXCEPTION_ACCESS_TOKEN_EXPIRED = HTTPException(status_code=ErrorType.HTTP_ACCESS_TOKEN_EXPIRED.value, detail=ErrorType.HTTP_ACCESS_TOKEN_EXPIRED.name)
|
|
EXCEPTION_REFRESH_TOKEN_EXPIRED = HTTPException(status_code=ErrorType.HTTP_REFRESH_TOKEN_EXPIRED.value, detail=ErrorType.HTTP_REFRESH_TOKEN_EXPIRED.name)
|
|
EXCEPTION_HTTP_INVALID_TOKEN_ACCESS = HTTPException(status_code=ErrorType.HTTP_INVALID_TOKEN_ACCESS.value, detail=ErrorType.HTTP_INVALID_TOKEN_ACCESS.name)
|
|
|
|
# 테넌트 라우팅 전용 예외 (P4 에서 미들웨어가 raise)
|
|
EXCEPTION_TENANT_HEADER_MISSING = HTTPException(status_code=400, detail=ErrorType.TENANT_HEADER_MISSING.name)
|
|
EXCEPTION_TENANT_NOT_REGISTERED = HTTPException(status_code=404, detail=ErrorType.TENANT_NOT_REGISTERED.name)
|
|
|
|
|
|
class DBType(Enum):
|
|
"""논리 DB 구분. backend 와 동일하게 단일 negosium_db(MAIN)를 공유한다.
|
|
agent 전용 RL 학습 자산은 negosium_db 안의 `learning` 스키마에 둔다(별도 DB 아님).
|
|
"""
|
|
|
|
MAIN = 1
|
|
|
|
|
|
class DBWRType(Enum):
|
|
"""Read / Write 접속 구분. 조회는 DB_READ, 변경은 DB_WRITE 엔진을 사용한다."""
|
|
|
|
DB_READ = 1
|
|
DB_WRITE = 2
|