Freeze an Order Item's Recipe at order time
Price was already snapshotted per Order Item so later menu changes don't rewrite history, but the Recipe (Step list) wasn't: advancing an Order Item looked up its next Step from the live menuItemSteps table, so an operator editing a Menu Item's Recipe mid-cook could silently reshape an Order already in flight (different Machine Tag, duration, or Step order than what the customer paid for). Adds order_item_steps as a per-Order-Item copy of the Recipe, taken at placement time; placeOrder, advanceOrderItemStep, and getOrderStatus now all read from that snapshot instead of the live menu. Recorded as docs/adr/0005 and added Recipe as a formal CONTEXT.md term. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Recipe snapshot per Order Item
|
||||
|
||||
An Order Item's full Recipe (every Preparation Step, in order) is copied from the Menu Item's live Recipe into a per-Order-Item `orderItemSteps` table at order-placement time, rather than each Step being looked up from the live Recipe as the Order Item progresses. We chose this because price is already snapshotted per Order Item for the same reason ("later menu changes don't rewrite history") — an operator editing a Menu Item's Recipe (reordering Steps, changing a Step's Machine Tag or duration) should never reshape an Order Item a customer already paid for and is partway through cooking. The live `menuItemSteps` table remains the source of truth for menu browsing and for new Orders; only `orderItemSteps` is read once an Order Item exists.
|
||||
Reference in New Issue
Block a user