in warehouse/src/on_order_events/main.py [0:0]
def on_order_modified(old_order: dict, new_order: dict):
"""
Process an OrderModified event
"""
order_id = old_order["orderId"]
# Idempotency check
metadata = get_metadata(order_id)
# If no metadata, the order is not in the database
if metadata is None:
logger.info({
"message": "Saving changes for unknown order {}".format(order_id),
"orderId": order_id
})
save_products(order_id, new_order["products"])
save_metadata(order_id, new_order["modifiedDate"])
# Accepting modifications only if the order is in the 'NEW' state and
# the event is newer than the last known state
elif metadata["status"] == "NEW" and metadata["modifiedDate"] < new_order["modifiedDate"]:
logger.info({
"message": "Saving changes for order {}".format(order_id),
"orderId": order_id
})
update_products(old_order["orderId"], old_order["products"], new_order["products"])
save_metadata(old_order["orderId"], new_order["modifiedDate"], metadata["status"])
elif metadata["modifiedDate"] >= new_order["modifiedDate"]:
logger.info({
"message": "Will not save changes: latest state for order {} is already in the database".format(order_id),
"metadata": metadata,
"orderId": order_id
})
elif metadata["status"] != "NEW":
logger.info({
"message": "Will not save changes: packaging request for order {} is not NEW".format(order_id),
"metadata": metadata,
"orderId": order_id
})
else:
logger.warning({
"message": "Will not save changes: packaging request for order {} cannot be updated".format(order_id),
"metadata": metadata,
"orderId": order_id
})