in src/backend/booking/src/reserve-booking/reserve.py [0:0]
def lambda_handler(event, context):
"""AWS Lambda Function entrypoint to reserve a booking
Parameters
----------
event: dict, required
Step Functions State Machine event
chargeId: string
pre-authorization charge ID
stateExecutionId: string
Step Functions Process Booking Execution ID
chargeId: string
Pre-authorization payment token
customerId: string
Customer unique identifier
bookingOutboundFlightId: string
Outbound flight unique identifier
context: object, required
Lambda Context runtime methods and attributes
Context doc: https://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html
Returns
-------
bookingId: string
booking ID generated
Raises
------
BookingReservationException
Booking Reservation Exception including error message upon failure
"""
if not is_booking_request_valid(event):
metrics.add_metric(name="InvalidReservationRequest", unit=MetricUnit.Count, value=1)
logger.error({"operation": "input_validation", "details": event})
raise ValueError("Invalid booking request")
try:
logger.debug(f"Reserving booking for customer {event['customerId']}")
ret = reserve_booking(event)
metrics.add_metric(name="SuccessfulReservation", unit=MetricUnit.Count, value=1)
tracer.put_annotation("Booking", ret["bookingId"])
tracer.put_annotation("BookingStatus", "RESERVED")
# Step Functions use the return to append `bookingId` key into the overall output
return ret["bookingId"]
except BookingReservationException as err:
metrics.add_metric(name="FailedReservation", unit=MetricUnit.Count, value=1)
tracer.put_annotation("BookingStatus", "ERROR")
logger.exception({"operation": "reserve_booking"})
raise