def on_order_modified()

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
        })