配置 SSOT(TOML + .env) 统一错误契约 Auth 与事务边界 Redis / Celery 可靠性:业务 Redis(DB/0)与 Celery broker/backend(DB/1)显式拆分;连接池、sync client 可观测性(OpenTelemetry + LGTM)
39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
"""支付模块异常定义(继承 AppError,由全局 handler 统一映射)。"""
|
||
|
||
from app.core.errors import AppError
|
||
|
||
_PAYMENT_CODE_MAP: dict[str, tuple[int, str]] = {
|
||
"PAYMENT_CONFIG_ERROR": (502, "PROVIDER_ERROR"),
|
||
"PAYMENT_CREATE_ERROR": (502, "PROVIDER_ERROR"),
|
||
"PAYMENT_NOTIFY_ERROR": (400, "BAD_REQUEST"),
|
||
"PAYMENT_QUERY_ERROR": (502, "PROVIDER_ERROR"),
|
||
"PAYMENT_ERROR": (400, "BAD_REQUEST"),
|
||
}
|
||
|
||
|
||
class PaymentError(AppError):
|
||
def __init__(self, message: str = "支付异常", code: str = "PAYMENT_ERROR"):
|
||
status_code, error_code = _PAYMENT_CODE_MAP.get(code, (400, code))
|
||
super().__init__(message, status_code=status_code, error_code=error_code)
|
||
self.code = code
|
||
|
||
|
||
class PaymentConfigError(PaymentError):
|
||
def __init__(self, message: str = "支付配置错误"):
|
||
super().__init__(message=message, code="PAYMENT_CONFIG_ERROR")
|
||
|
||
|
||
class PaymentCreateError(PaymentError):
|
||
def __init__(self, message: str = "创建支付订单失败"):
|
||
super().__init__(message=message, code="PAYMENT_CREATE_ERROR")
|
||
|
||
|
||
class PaymentNotifyError(PaymentError):
|
||
def __init__(self, message: str = "支付回调处理失败"):
|
||
super().__init__(message=message, code="PAYMENT_NOTIFY_ERROR")
|
||
|
||
|
||
class PaymentQueryError(PaymentError):
|
||
def __init__(self, message: str = "查询支付状态失败"):
|
||
super().__init__(message=message, code="PAYMENT_QUERY_ERROR")
|