diff --git a/video-gen-api/app/middleware/request_encrypt.py b/video-gen-api/app/middleware/request_encrypt.py index 0d4113ed..06e6a6ac 100644 --- a/video-gen-api/app/middleware/request_encrypt.py +++ b/video-gen-api/app/middleware/request_encrypt.py @@ -3,7 +3,7 @@ import json import logging from cryptography.hazmat.primitives.ciphers.aead import AESGCM -from fastapi import Request, Response +from fastapi import HTTPException, Request, Response from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint from app.config import settings @@ -98,6 +98,14 @@ class RequestEncryptMiddleware(BaseHTTPMiddleware): status_code=response.status_code, headers={"X-Encrypted": "true", "Content-Type": "application/json"}, ) + except HTTPException as http_exc: + # BaseHTTPMiddleware 中 call_next 抛出的 HTTPException 会直接传播, + # 这里捕获后返回对应状态码的响应,避免被外层 except Exception 吞掉 + return Response( + content=json.dumps({"detail": http_exc.detail}, ensure_ascii=False), + status_code=http_exc.status_code, + headers={"Content-Type": "application/json"}, + ) except Exception: logger.exception("Request decryption failed") return Response( diff --git a/video-gen-api/app/services/invoice.py b/video-gen-api/app/services/invoice.py index 614d2b2a..8164519c 100644 --- a/video-gen-api/app/services/invoice.py +++ b/video-gen-api/app/services/invoice.py @@ -93,7 +93,7 @@ async def create_invoice( for o in occupied ) raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, + status_code=status.HTTP_409_CONFLICT, detail=details, )