Source code for ecstask.productavailability.services.checkout_service

import logging

from ecstask.productavailability.exceptions.product_availability_service_exception import PayloadValidationError
from ecstask.productavailability.utilities.aws_utils import AWSClientFactory
from ecstask.productavailability.utilities.constant import NEW_ORDER_TYPE, EDIT_ORDER_TYPE, CANCELLED_ORDER_TYPE
from pymorri.exceptions import MoriException
from pymorri.util.aws_utils import send_messages_to_sqs
from pymorri.util.model import SqsMessage

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


[docs]def validate_checkout_request(request): """ This method is created to validate request JSON for webhook checkout :return: it will raise 400 if any required parameter is missing """ response = {} request_json = request.get_json() order_id = request_json.get("orderId") banner_id = request_json.get("retailerBannerId") if "orderType" not in request.args: response["message"] = "Please provide orderType query parameter" raise PayloadValidationError(response, 400) if (order_id is None) or (banner_id is None): response["message"] = "Please provide required attributes orderId and retailerBannerId" raise PayloadValidationError(response, 400) order_type = request.args.get('orderType') if order_type not in [NEW_ORDER_TYPE, EDIT_ORDER_TYPE, CANCELLED_ORDER_TYPE]: response["message"] = f"Please provide type {NEW_ORDER_TYPE, EDIT_ORDER_TYPE, CANCELLED_ORDER_TYPE}" raise PayloadValidationError(response, 400)
[docs]def process_checkout(order_id, order_type, dependency_manager): """ This method is used for processing checkout json It will prepare SQS payload and will add message into SQS :param order_id: order id received in request :param order_type: order type received in request :param dependency_manager: it will used for getting SQS name from configuration """ try: sqs_body = { "orderId": order_id, "orderType": order_type } sqs_message = SqsMessage(message_body=sqs_body) logger.info(f"Checkout SQS body {sqs_body}") checkout_message = [sqs_message] send_messages_to_sqs(dependency_manager.get_checkout_queue_name(), checkout_message, 10, AWSClientFactory.get_sqs_client(dependency_manager.get_checkout_queue_name())) except MoriException as ex: logger.error(f"Error process_checkout {ex}") raise ex