@@ -208,8 +208,7 @@ async def _handle_order_created(order_created: CoffeeOrderCreated, db: Prisma) -
208208 "createdAt" : datetime .now (),
209209 },
210210 "update" : {
211- "coffeeType" : order_created .coffee_type ,
212- "updatedAt" : datetime .now (),
211+ # Don't update existing orders on creation events
213212 }
214213 }
215214 )
@@ -219,38 +218,42 @@ async def _handle_order_created(order_created: CoffeeOrderCreated, db: Prisma) -
219218
220219async def _handle_order_updated (order_updated : CoffeeOrderUpdated , db : Prisma ) -> None :
221220 """Process an updated coffee order."""
222- logger .info (f"π Updating order { order_updated .order_id } to status: { order_updated .status } " )
221+ order_id = order_updated .order_id
222+ new_status = order_updated .status
223+ logger .info (f"π Processing order update for { order_id } to status { new_status } " )
223224
224- # Update order in database
225- await db .coffeeorder .upsert (
226- where = {"objectId" : order_updated .order_id },
225+ # Get current order from database to check for duplicates and get coffee type
226+ order = await db .coffeeorder .find_unique (where = {"objectId" : order_id })
227+
228+ if not order :
229+ logger .error (f"β Order { order_id } not found in database" )
230+ return
231+
232+ # Check if the order is already at this status to avoid duplicates
233+ if order .status == new_status :
234+ logger .info (f"β οΈ Order { order_id } already has status { new_status } , skipping" )
235+ return
236+
237+ # Update order status in database (no upsert needed - order exists!)
238+ await db .coffeeorder .update (
239+ where = {"objectId" : order_id },
227240 data = {
228- "create" : {
229- "objectId" : order_updated .order_id ,
230- "status" : order_updated .status ,
231- "createdAt" : datetime .now (),
232- },
233- "update" : {
234- "status" : order_updated .status ,
235- "updatedAt" : datetime .now (),
236- }
241+ "status" : new_status ,
242+ "updatedAt" : datetime .now (),
237243 }
238244 )
239245
240- # If order is now being processed, trigger coffee machine
241- if order_updated .status .lower () == "processing" :
242- logger .info (f"π Order { order_updated .order_id } is being processed - triggering coffee machine" )
243-
244- # Get order details to determine coffee type
245- order = await db .coffeeorder .find_unique (where = {"objectId" : order_updated .order_id })
246-
247- if order and order .coffeeType :
248- success = await _trigger_coffee_machine (order .coffeeType )
249- if success :
250- logger .info (f"β
Coffee machine triggered for order { order_updated .order_id } " )
251- else :
252- logger .error (f"β Failed to trigger coffee machine for order { order_updated .order_id } " )
246+ logger .info (f"π Updated order { order_id } status to { new_status } " )
247+
248+ # If status is "Processing", trigger coffee machine using stored coffee type
249+ if new_status == "Processing" and order .coffeeType :
250+ logger .info (f"π Order { order_id } is being processed - triggering coffee machine" )
251+ success = await _trigger_coffee_machine (order .coffeeType )
252+ if success :
253+ logger .info (f"β
Coffee machine triggered for order { order_id } " )
253254 else :
254- logger .warning (f"β οΈ Order { order_updated .order_id } has no coffee type - cannot trigger machine" )
255+ logger .error (f"β Failed to trigger coffee machine for order { order_id } " )
256+ elif new_status == "Processing" and not order .coffeeType :
257+ logger .warning (f"β οΈ Order { order_id } has no coffee type - cannot trigger machine" )
255258
256- logger .info (f"β
Order { order_updated . order_id } updated to status: { order_updated . status } " )
259+ logger .info (f"β
Order { order_id } updated to status: { new_status } " )
0 commit comments