fix: 409 is exception
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
from urllib.parse import parse_qs
|
from urllib.parse import parse_qs
|
||||||
import orjson
|
import orjson
|
||||||
from fastapi import APIRouter, Depends, Request, Response
|
from fastapi import APIRouter, Depends, Request
|
||||||
from fastapi.responses import ORJSONResponse
|
from fastapi.responses import ORJSONResponse
|
||||||
from src.application.commands import CreateOrderCommand
|
from src.application.commands import CreateOrderCommand
|
||||||
from src.application.commands import CreatePaymentCloudkassirCommand
|
from src.application.commands import CreatePaymentCloudkassirCommand
|
||||||
from src.application.contracts import ILogger
|
from src.application.contracts import ILogger
|
||||||
from src.application.domain.dto import AuthContext
|
from src.application.domain.dto import AuthContext
|
||||||
from src.application.domain.enums import OrderStatus
|
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.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.commands import get_create_order_command, get_create_payment_cloudkassir_command
|
||||||
from src.presentation.dependencies.logger import get_logger
|
from src.presentation.dependencies.logger import get_logger
|
||||||
@@ -25,7 +26,7 @@ order_router = APIRouter(prefix='/order', tags=['orders'])
|
|||||||
401: {'model': ErrorResponse, 'description': 'Unauthorized'},
|
401: {'model': ErrorResponse, 'description': 'Unauthorized'},
|
||||||
403: {'model': ErrorResponse, 'description': 'Forbidden'},
|
403: {'model': ErrorResponse, 'description': 'Forbidden'},
|
||||||
404: {'model': ErrorResponse, 'description': 'Not Found'},
|
404: {'model': ErrorResponse, 'description': 'Not Found'},
|
||||||
409: {'model': CreateOrderResponse | ErrorResponse, 'description': 'Conflict'},
|
409: {'model': ErrorResponse, 'description': 'Conflict'},
|
||||||
500: {'model': ErrorResponse, 'description': 'Internal Server Error'},
|
500: {'model': ErrorResponse, 'description': 'Internal Server Error'},
|
||||||
502: {'model': ErrorResponse, 'description': 'Bad Gateway'},
|
502: {'model': ErrorResponse, 'description': 'Bad Gateway'},
|
||||||
503: {'model': ErrorResponse, 'description': 'Service Unavailable'},
|
503: {'model': ErrorResponse, 'description': 'Service Unavailable'},
|
||||||
@@ -34,7 +35,6 @@ order_router = APIRouter(prefix='/order', tags=['orders'])
|
|||||||
#@csrf_protect()
|
#@csrf_protect()
|
||||||
async def create_order(
|
async def create_order(
|
||||||
payment_data: CreateOrder,
|
payment_data: CreateOrder,
|
||||||
response: Response,
|
|
||||||
#auth: AuthContext = Depends(require_access_token),
|
#auth: AuthContext = Depends(require_access_token),
|
||||||
command: CreateOrderCommand = Depends(get_create_order_command),
|
command: CreateOrderCommand = Depends(get_create_order_command),
|
||||||
logger: ILogger = Depends(get_logger),
|
logger: ILogger = Depends(get_logger),
|
||||||
@@ -46,10 +46,19 @@ async def create_order(
|
|||||||
OrderStatus.REJECTED,
|
OrderStatus.REJECTED,
|
||||||
OrderStatus.ERROR,
|
OrderStatus.ERROR,
|
||||||
)
|
)
|
||||||
http_code = 409 if itpay_error else 201
|
log_ids = {
|
||||||
response.status_code = http_code
|
'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(
|
content = CreateOrderResponse(
|
||||||
status_code=http_code,
|
status_code=201,
|
||||||
order=OrderPaymentResponse(
|
order=OrderPaymentResponse(
|
||||||
id=o.id,
|
id=o.id,
|
||||||
created_at=o.created_at.isoformat() if o.created_at is not None else None,
|
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,
|
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
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user