diff --git a/src/presentation/routing/order.py b/src/presentation/routing/order.py index c19ccfd..918c55e 100644 --- a/src/presentation/routing/order.py +++ b/src/presentation/routing/order.py @@ -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