fix: 409 is exception

This commit is contained in:
2026-05-09 14:57:15 +03:00
parent 766280fd45
commit ad51f1220f

View File

@@ -1,12 +1,13 @@
from urllib.parse import parse_qs
import orjson
from fastapi import APIRouter, Depends, Request, Response
from fastapi import APIRouter, Depends, Request
from fastapi.responses import ORJSONResponse
from src.application.commands import CreateOrderCommand
from src.application.commands import CreatePaymentCloudkassirCommand
from src.application.contracts import ILogger
from src.application.domain.dto import AuthContext
from src.application.domain.enums import OrderStatus
from src.application.domain.exceptions import ConflictException
from src.presentation.decorators import require_access_token, csrf_protect
from src.presentation.dependencies.commands import get_create_order_command, get_create_payment_cloudkassir_command
from src.presentation.dependencies.logger import get_logger
@@ -25,7 +26,7 @@ order_router = APIRouter(prefix='/order', tags=['orders'])
401: {'model': ErrorResponse, 'description': 'Unauthorized'},
403: {'model': ErrorResponse, 'description': 'Forbidden'},
404: {'model': ErrorResponse, 'description': 'Not Found'},
409: {'model': CreateOrderResponse | ErrorResponse, 'description': 'Conflict'},
409: {'model': ErrorResponse, 'description': 'Conflict'},
500: {'model': ErrorResponse, 'description': 'Internal Server Error'},
502: {'model': ErrorResponse, 'description': 'Bad Gateway'},
503: {'model': ErrorResponse, 'description': 'Service Unavailable'},
@@ -34,7 +35,6 @@ order_router = APIRouter(prefix='/order', tags=['orders'])
#@csrf_protect()
async def create_order(
payment_data: CreateOrder,
response: Response,
#auth: AuthContext = Depends(require_access_token),
command: CreateOrderCommand = Depends(get_create_order_command),
logger: ILogger = Depends(get_logger),
@@ -46,10 +46,19 @@ async def create_order(
OrderStatus.REJECTED,
OrderStatus.ERROR,
)
http_code = 409 if itpay_error else 201
response.status_code = http_code
log_ids = {
'event': 'order_create_itpay_failed' if itpay_error else 'order_created',
'order_id': o.id,
'user_id': o.user_id,
'client_payment_id': o.client_payment_id,
'itpay_id': o.itpay_id,
'order_status': o.status.value if o.status is not None else None,
}
logger.info(log_ids)
if itpay_error:
raise ConflictException(message='Payment provider rejected order')
content = CreateOrderResponse(
status_code=http_code,
status_code=201,
order=OrderPaymentResponse(
id=o.id,
created_at=o.created_at.isoformat() if o.created_at is not None else None,
@@ -74,15 +83,6 @@ async def create_order(
itpay_created_at=o.itpay_created_at.isoformat() if o.itpay_created_at is not None else None,
),
)
log_ids = {
'event': 'order_create_itpay_failed' if itpay_error else 'order_created',
'order_id': o.id,
'user_id': o.user_id,
'client_payment_id': o.client_payment_id,
'itpay_id': o.itpay_id,
'order_status': o.status.value if o.status is not None else None,
}
logger.info(log_ids)
return content