From 169b63160d3993d03d38abe2815d0810b4910530 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Sun, 1 Feb 2026 00:07:10 +0000 Subject: [PATCH] fix: resolve async SQLAlchemy lazy loading issue in cart service Use get_cart() with selectinload instead of refresh() to avoid greenlet_spawn errors when accessing cart.items relationship. Co-Authored-By: Claude Opus 4.5 --- backend/app/services/cart_service.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/app/services/cart_service.py b/backend/app/services/cart_service.py index 048295c..4132005 100644 --- a/backend/app/services/cart_service.py +++ b/backend/app/services/cart_service.py @@ -21,7 +21,13 @@ class CartService: cart = Cart() self.db.add(cart) await self.db.commit() - await self.db.refresh(cart) + # Re-fetch with items loaded to avoid lazy loading issues + result = await self.db.execute( + select(Cart) + .where(Cart.id == cart.id) + .options(selectinload(Cart.items)) + ) + cart = result.scalar_one() return self._cart_to_response(cart) async def get_cart(self, cart_id: UUID) -> CartResponse | None: @@ -59,8 +65,7 @@ class CartService: ): existing.quantity += item.quantity await self.db.commit() - await self.db.refresh(cart) - return self._cart_to_response(cart) + return await self.get_cart(cart_id) # Add new item cart_item = CartItem( @@ -73,8 +78,7 @@ class CartService: ) self.db.add(cart_item) await self.db.commit() - await self.db.refresh(cart) - return self._cart_to_response(cart) + return await self.get_cart(cart_id) async def update_item( self,