Skip to content

Commit 4cc9b7e

Browse files
committed
Fix db upsert and update logic
1 parent 886f293 commit 4cc9b7e

File tree

1 file changed

+33
-30
lines changed
  • coffee_ws/src/sui_coffee_order_indexer/sui_coffee_order_indexer/handlers

1 file changed

+33
-30
lines changed

β€Žcoffee_ws/src/sui_coffee_order_indexer/sui_coffee_order_indexer/handlers/order_handler.pyβ€Ž

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

220219
async 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

Comments
Β (0)