From 17ab7f09c76153f1c6d68c781557c6b37b642999 Mon Sep 17 00:00:00 2001 From: giles Date: Thu, 19 Feb 2026 09:43:35 +0000 Subject: [PATCH] Add delete endpoint with confirm modal, keep items at quantity 0 - POST /delete// removes the cart item entirely - POST /quantity/ now clamps at 0 instead of deleting - cart_delete_url Jinja global registered for template Co-Authored-By: Claude Opus 4.6 --- app.py | 1 + bp/cart/global_routes.py | 28 ++++++++++++++++++++++++---- shared | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app.py b/app.py index 190fde1..393202a 100644 --- a/app.py +++ b/app.py @@ -100,6 +100,7 @@ def create_app() -> "Quart": ]) app.jinja_env.globals["cart_quantity_url"] = lambda product_id: f"/quantity/{product_id}/" + app.jinja_env.globals["cart_delete_url"] = lambda product_id: f"/delete/{product_id}/" # --- Page slug hydration (follows events/market app pattern) --- diff --git a/bp/cart/global_routes.py b/bp/cart/global_routes.py index bef45a1..41d688e 100644 --- a/bp/cart/global_routes.py +++ b/bp/cart/global_routes.py @@ -72,10 +72,30 @@ def register(url_prefix: str) -> Blueprint: existing = await g.s.scalar(select(CartItem).where(*filters)) if existing: - if count <= 0: - await g.s.delete(existing) - else: - existing.quantity = count + existing.quantity = max(count, 0) + await g.s.flush() + + resp = await make_response("", 200) + resp.headers["HX-Refresh"] = "true" + return resp + + @bp.post("/delete//") + async def delete_item(product_id: int): + ident = current_cart_identity() + + filters = [ + CartItem.deleted_at.is_(None), + CartItem.product_id == product_id, + ] + if ident["user_id"] is not None: + filters.append(CartItem.user_id == ident["user_id"]) + else: + filters.append(CartItem.session_id == ident["session_id"]) + + existing = await g.s.scalar(select(CartItem).where(*filters)) + + if existing: + await g.s.delete(existing) await g.s.flush() resp = await make_response("", 200) diff --git a/shared b/shared index 7b55d78..6db91cb 160000 --- a/shared +++ b/shared @@ -1 +1 @@ -Subproject commit 7b55d782148e52ee4ddbeb0e4952058f269aef7d +Subproject commit 6db91cb3c191e279027b71e4086372b76d9d7dc3