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