in orders/src/create_order/main.py [0:0]
def handler(event, _):
"""
Lambda function handler
"""
# Basic checks on the event
for key in ["order", "userId"]:
if key not in event:
return {
"success": False,
"message": "Invalid event",
"errors": ["Missing {} in event".format(key)]
}
# Inject userId into the order
order = event["order"]
order["userId"] = event["userId"]
# Validate the schema of the order
try:
jsonschema.validate(order, schema)
except jsonschema.ValidationError as exc:
return {
"success": False,
"message": "JSON Schema validation error",
"errors": [str(exc)]
}
# Cleanup products
order["products"] = cleanup_products(order["products"])
# Inject fields in the order
order = inject_order_fields(order)
# Validate the order against other services
error_msgs = asyncio.run(validate(order))
if len(error_msgs) > 0:
return {
"success": False,
"message": "Validation errors",
"errors": error_msgs
}
store_order(order)
# Log
tracer.put_annotation("orderId", order["orderId"])
logger.info({
"message": "Order {} created".format(order["orderId"]),
"orderId": order["orderId"]
})
logger.debug({
"message": "Order {} created".format(order["orderId"]),
"orderId": order["orderId"],
"order": order
})
# Add custom metrics
metrics.add_dimension(name="environment", value=ENVIRONMENT)
metrics.add_metric(name="orderCreated", unit=MetricUnit.Count, value=1)
metrics.add_metric(name="orderCreatedTotal", unit=MetricUnit.Count, value=order["total"])
return {
"success": True,
"order": order,
"message": "Order created"
}