Fix cross-DB query: market app cart_items via data endpoint

market_context() was querying CartItem directly via g.s (db_market),
but cart_items lives in db_cart. Replace with fetch_data("cart",
"cart-items") and add the corresponding data endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-26 13:52:09 +00:00
parent 00249dd2a9
commit cf7fbd8e9b
2 changed files with 45 additions and 14 deletions

View File

@@ -80,4 +80,36 @@ def register() -> Blueprint:
_handlers["page-config-ensure"] = _page_config_ensure
# --- cart-items (product slugs + quantities for template rendering) ---
async def _cart_items():
from sqlalchemy import select
from sqlalchemy.orm import selectinload
from shared.models.market import CartItem
user_id = request.args.get("user_id", type=int)
session_id = request.args.get("session_id")
filters = [CartItem.deleted_at.is_(None)]
if user_id is not None:
filters.append(CartItem.user_id == user_id)
elif session_id is not None:
filters.append(CartItem.session_id == session_id)
else:
return []
result = await g.s.execute(
select(CartItem).where(*filters).options(selectinload(CartItem.product))
)
items = result.scalars().all()
return [
{
"product_id": item.product_id,
"product_slug": item.product.slug if item.product else None,
"quantity": item.quantity,
}
for item in items
]
_handlers["cart-items"] = _cart_items
return bp