feat: add custom exceptions
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from urllib.parse import parse_qs
|
||||
import orjson
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
from fastapi import APIRouter, Depends, Request, Response
|
||||
from fastapi.responses import ORJSONResponse
|
||||
from src.application.commands import CreateOrderCommand
|
||||
from src.application.commands import CreatePaymentCloudkassirCommand
|
||||
@@ -10,20 +10,26 @@ from src.application.domain.enums import OrderStatus
|
||||
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
|
||||
from src.presentation.schemas.order import CreateOrder
|
||||
from src.presentation.schemas.order import CreateOrder,CreateOrderResponse,OrderPaymentResponse
|
||||
from src.presentation.schemas.itpay_payment_models import ItpayPaymentData
|
||||
|
||||
order_router = APIRouter(prefix='/order', tags=['orders'])
|
||||
|
||||
|
||||
@order_router.post('/create')
|
||||
@order_router.post(
|
||||
'/create',
|
||||
response_model=CreateOrderResponse,
|
||||
status_code=201,
|
||||
responses={409: {'model': CreateOrderResponse}},
|
||||
)
|
||||
#@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),
|
||||
) -> ORJSONResponse:
|
||||
) -> CreateOrderResponse:
|
||||
#o = await command(payment_data, auth.user_id)
|
||||
o = await command(payment_data, '01KPKAFN6J1NJBY15DX8JE2QYB')
|
||||
itpay_error = o.status in (
|
||||
@@ -32,32 +38,33 @@ async def create_order(
|
||||
OrderStatus.ERROR,
|
||||
)
|
||||
http_code = 409 if itpay_error else 201
|
||||
content: dict = {
|
||||
'status_code': http_code,
|
||||
'order': {
|
||||
'id': o.id,
|
||||
'created_at': o.created_at.isoformat() if o.created_at is not None else None,
|
||||
'updated_at': o.updated_at.isoformat() if o.updated_at is not None else None,
|
||||
'user_id': o.user_id,
|
||||
'usdt_amount': str(o.usdt_amount) if o.usdt_amount is not None else None,
|
||||
'usdt_exchange_rate': str(o.usdt_exchange_rate) if o.usdt_exchange_rate is not None else None,
|
||||
'gas_fee': str(o.gas_fee) if o.gas_fee is not None else None,
|
||||
'total_price': str(o.total_price) if o.total_price is not None else None,
|
||||
'service_fee': str(o.service_fee) if o.service_fee is not None else None,
|
||||
'status': o.status.value if o.status is not None else None,
|
||||
'client_payment_id': o.client_payment_id,
|
||||
'itpay_payment_qr_url_desktop': o.itpay_payment_qr_url_desktop,
|
||||
'itpay_payment_qr_url_android': o.itpay_payment_qr_url_android,
|
||||
'itpay_payment_qr_url_ios': o.itpay_payment_qr_url_ios,
|
||||
'itpay_payment_qr_image_desktop': o.itpay_payment_qr_image_desktop,
|
||||
'itpay_payment_qr_image_android': o.itpay_payment_qr_image_android,
|
||||
'itpay_payment_qr_image_ios': o.itpay_payment_qr_image_ios,
|
||||
'itpay_id': o.itpay_id,
|
||||
'itpay_qr_id': o.itpay_qr_id,
|
||||
'itpay_amount': str(o.itpay_amount) if o.itpay_amount is not None else None,
|
||||
'itpay_created_at': o.itpay_created_at.isoformat() if o.itpay_created_at is not None else None,
|
||||
}
|
||||
}
|
||||
response.status_code = http_code
|
||||
content = CreateOrderResponse(
|
||||
status_code=http_code,
|
||||
order=OrderPaymentResponse(
|
||||
id=o.id,
|
||||
created_at=o.created_at.isoformat() if o.created_at is not None else None,
|
||||
updated_at=o.updated_at.isoformat() if o.updated_at is not None else None,
|
||||
user_id=o.user_id,
|
||||
usdt_amount=str(o.usdt_amount) if o.usdt_amount is not None else None,
|
||||
usdt_exchange_rate=str(o.usdt_exchange_rate) if o.usdt_exchange_rate is not None else None,
|
||||
gas_fee=str(o.gas_fee) if o.gas_fee is not None else None,
|
||||
total_price=str(o.total_price) if o.total_price is not None else None,
|
||||
service_fee=str(o.service_fee) if o.service_fee is not None else None,
|
||||
status=o.status,
|
||||
client_payment_id=o.client_payment_id,
|
||||
itpay_payment_qr_url_desktop=o.itpay_payment_qr_url_desktop,
|
||||
itpay_payment_qr_url_android=o.itpay_payment_qr_url_android,
|
||||
itpay_payment_qr_url_ios=o.itpay_payment_qr_url_ios,
|
||||
itpay_payment_qr_image_desktop=o.itpay_payment_qr_image_desktop,
|
||||
itpay_payment_qr_image_android=o.itpay_payment_qr_image_android,
|
||||
itpay_payment_qr_image_ios=o.itpay_payment_qr_image_ios,
|
||||
itpay_id=o.itpay_id,
|
||||
itpay_qr_id=o.itpay_qr_id,
|
||||
itpay_amount=str(o.itpay_amount) if o.itpay_amount 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,
|
||||
@@ -67,7 +74,7 @@ async def create_order(
|
||||
'order_status': o.status.value if o.status is not None else None,
|
||||
}
|
||||
logger.info(log_ids)
|
||||
return ORJSONResponse(content=content, status_code=http_code)
|
||||
return content
|
||||
|
||||
|
||||
@order_router.post('/webhook/itpay')
|
||||
|
||||
Reference in New Issue
Block a user