""" Centralized Error Code Registry This module provides a single source of truth for all error codes used across Doorman. Using constants ensures consistency and makes it easier to search/refactor error codes. Usage: from utils.error_codes import ErrorCode raise HTTPException( status_code=401, detail={ 'error_code': ErrorCode.AUTH_INVALID_CREDENTIALS, 'message': 'Invalid username or password' } ) return ResponseModel( status_code=404, error_code=ErrorCode.USER_NOT_FOUND, error_message='User not found' ).dict() """ class ErrorCode: """ Centralized error code constants. Naming Convention: - Format: CATEGORY_DESCRIPTION = 'PREFIX###' - Categories: AUTH, USER, API, ENDPOINT, GATEWAY, etc. - Prefixes: AUTH, USR, API, END, GTW, etc. - Numbers: Sequential within category Example: AUTH_INVALID_CREDENTIALS = 'AUTH001' USER_NOT_FOUND = 'USR002' """ AUTH_MISSING_CREDENTIALS = 'AUTH001' AUTH_INVALID_CREDENTIALS = 'AUTH002' AUTH_TOKEN_INVALID = 'AUTH003' AUTH_TOKEN_MISSING = 'AUTH004' AUTH_TOKEN_EXPIRED = 'AUTH005' AUTH_USER_INACTIVE = 'AUTH007' AUTH_UNEXPECTED_ERROR = 'AUTH900' USR_ALREADY_EXISTS = 'USR001' USR_NOT_FOUND = 'USR002' USR_DELETE_FAILED = 'USR003' USR_UPDATE_FAILED = 'USR004' USR_WEAK_PASSWORD = 'USR005' USR_UNAUTHORIZED_ACCESS = 'USR006' USR_INVALID_OPERATION = 'USR007' USR_PERMISSION_DENIED = 'USR008' USR_USERNAME_INVALID = 'USR013' USR_EMAIL_INVALID = 'USR015' USR_TOO_MANY_ATTRIBUTES = 'USR016' API_ALREADY_EXISTS = 'API001' API_CREATE_FAILED = 'API002' API_NOT_FOUND = 'API003' API_UPDATE_NAME_FORBIDDEN = 'API005' API_NO_DATA_TO_UPDATE = 'API006' API_PERMISSION_DENIED = 'API007' API_INVALID_REQUEST = 'API008' API_PROTO_INVALID = 'API009' API_PUBLIC_CREDITS_CONFLICT = 'API013' END_ALREADY_EXISTS = 'END001' END_CREATE_FAILED = 'END002' END_NOT_FOUND = 'END003' END_UPDATE_FAILED = 'END004' END_DELETE_FAILED = 'END005' END_INVALID_TYPE = 'END006' END_VALIDATION_FAILED = 'END007' END_SERVERS_REQUIRED = 'END008' END_CIRCULAR_DEPENDENCY = 'END009' END_PERMISSION_DENIED = 'END010' END_INVALID_REQUEST = 'END011' END_MISSING_PROTO = 'END012' END_PATH_CONFLICT = 'END013' END_METHOD_CONFLICT = 'END014' END_SERVER_INVALID = 'END015' END_TIMEOUT_INVALID = 'END016' END_RETRIES_INVALID = 'END017' END_HEADERS_INVALID = 'END018' END_BODY_TRANSFORM_INVALID = 'END019' END_RESPONSE_TRANSFORM_INVALID = 'END020' END_LOAD_BALANCER_INVALID = 'END021' END_CIRCUIT_BREAKER_INVALID = 'END022' END_RATE_LIMIT_INVALID = 'END023' ROLE_ALREADY_EXISTS = 'ROLE001' ROLE_CREATE_FAILED = 'ROLE002' ROLE_NOT_FOUND = 'ROLE004' ROLE_NAME_IMMUTABLE = 'ROLE005' ROLE_UPDATE_FAILED = 'ROLE006' ROLE_NO_DATA_TO_UPDATE = 'ROLE007' ROLE_DELETE_FAILED = 'ROLE008' ROLE_PERMISSION_DENIED = 'ROLE009' ROLE_INVALID_REQUEST = 'ROLE010' ROLE_IN_USE = 'ROLE011' ROLE_PERMISSION_INVALID = 'ROLE013' ROLE_NAME_INVALID = 'ROLE014' ROLE_RESERVED_NAME = 'ROLE015' ROLE_DESCRIPTION_REQUIRED = 'ROLE016' GRP_ALREADY_EXISTS = 'GRP001' GRP_CREATE_FAILED = 'GRP002' GRP_NOT_FOUND = 'GRP003' GRP_UPDATE_FAILED = 'GRP004' GRP_DELETE_FAILED = 'GRP005' GRP_NAME_IMMUTABLE = 'GRP006' GRP_NO_DATA_TO_UPDATE = 'GRP007' GRP_PERMISSION_DENIED = 'GRP008' GRP_INVALID_REQUEST = 'GRP009' GRP_IN_USE = 'GRP010' SUB_INVALID_API = 'SUB003' SUB_ALREADY_EXISTS = 'SUB004' SUB_NOT_FOUND = 'SUB005' SUB_CREATE_FAILED = 'SUB006' SUB_PERMISSION_DENIED = 'SUB007' SUB_INVALID_REQUEST = 'SUB008' SUB_DELETE_FAILED = 'SUB009' RTG_ALREADY_EXISTS = 'RTG001' RTG_CREATE_FAILED = 'RTG002' RTG_NOT_FOUND = 'RTG004' RTG_UPDATE_FAILED = 'RTG005' RTG_DELETE_FAILED = 'RTG006' RTG_NO_DATA_TO_UPDATE = 'RTG007' RTG_NAME_IMMUTABLE = 'RTG008' RTG_PERMISSION_DENIED = 'RTG009' RTG_INVALID_REQUEST = 'RTG010' RTG_PRIORITY_CONFLICT = 'RTG011' RTG_PATH_INVALID = 'RTG012' RTG_CONDITION_INVALID = 'RTG013' CRD_GROUP_EXISTS = 'CRD001' CRD_CREATE_FAILED = 'CRD002' CRD_GROUP_IMMUTABLE = 'CRD003' CRD_NOT_FOUND = 'CRD004' CRD_UPDATE_FAILED = 'CRD005' CRD_NO_DATA_TO_UPDATE = 'CRD006' CRD_DELETE_NOT_FOUND = 'CRD007' CRD_DELETE_FAILED = 'CRD008' CRD_GROUP_NAME_REQUIRED = 'CRD009' CRD_API_KEY_REQUIRED = 'CRD010' CRD_DATABASE_ERROR = 'CRD011' CRD_DATABASE_ERROR_UPDATE = 'CRD012' CRD_DATABASE_ERROR_DELETE = 'CRD013' CRD_USERNAME_MISMATCH = 'CRD014' CRD_USER_CREDITS_ERROR = 'CRD015' CRD_GET_ALL_ERROR = 'CRD016' CRD_USER_NOT_FOUND = 'CRD017' CRD_GET_USER_ERROR = 'CRD018' CRD_LIST_ERROR = 'CRD020' CRD_FETCH_ERROR = 'CRD021' CRD_RETRIEVE_ERROR = 'CRD022' GTW_UPSTREAM_ERROR = 'GTW001' GTW_TIMEOUT = 'GTW002' GTW_NO_AVAILABLE_SERVERS = 'GTW003' GTW_INVALID_REQUEST = 'GTW004' GTW_RATE_LIMIT_EXCEEDED = 'GTW005' GTW_SERVICE_UNAVAILABLE = 'GTW006' GTW_AUTHENTICATION_REQUIRED = 'GTW007' GTW_SUBSCRIPTION_REQUIRED = 'GTW008' GTW_CIRCUIT_BREAKER_OPEN = 'GTW010' GTW_INVALID_ENDPOINT = 'GTW011' GTW_PROTO_DECODE_ERROR = 'GTW013' GTW_UNEXPECTED_ERROR = 'GTW999' CFG_PERMISSION_DENIED = 'CFG001' CFG_API_PERMISSION_DENIED = 'CFG002' CFG_ENDPOINT_PERMISSION_DENIED = 'CFG003' CFG_GROUP_PERMISSION_DENIED = 'CFG004' CFG_ROLE_PERMISSION_DENIED = 'CFG005' CFG_ROUTING_PERMISSION_DENIED = 'CFG006' CFG_SUBSCRIPTION_PERMISSION_DENIED = 'CFG007' CFG_NOT_FOUND = 'CFG404' SEC_PERMISSION_DENIED = 'SEC001' SEC_UPDATE_FAILED = 'SEC002' SEC_INVALID_IP = 'SEC003' SEC_INVALID_SETTING = 'SEC004' SEC_PROTECTED_SETTING = 'SEC005' LOG_PERMISSION_DENIED = 'LOG001' LOG_INVALID_LEVEL = 'LOG002' LOG_UPDATE_FAILED = 'LOG003' LOG_QUERY_FAILED = 'LOG004' LOG_EXPORT_FAILED = 'LOG005' MON_PERMISSION_DENIED = 'MON001' MON_QUERY_FAILED = 'MON002' MON_UNEXPECTED_ERROR = 'MON003' MEM_PERMISSION_DENIED = 'MEM001' MEM_DUMP_FAILED = 'MEM002' MEM_OPERATION_FAILED = 'MEM003' DEMO_ALREADY_SEEDED = 'DEMO001' DEMO_SEED_FAILED = 'DEMO999' TLS_PERMISSION_DENIED = 'TLS001' TLS_UNEXPECTED_ERROR = 'TLS999' GEN_INVALID_REQUEST = 'GEN001' GEN_VALIDATION_ERROR = 'GEN002' ISE_INTERNAL_ERROR = 'ISE001' REQ_BODY_TOO_LARGE = 'REQ001' VAL_INVALID_JSON = 'VAL001' JWT_DECODE_ERROR = 'JWT001' RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED' # Alias for backward compatibility class ErrorCodes(ErrorCode): """Deprecated: Use ErrorCode instead.""" pass