Fix events: use cart-mini fragment instead of local cart template

Events was trying to render _types/cart/_mini.html locally, which only
exists in the cart service. Replace with fetch_fragment("cart", "cart-mini")
calls and add oob param support to the cart-mini fragment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 10:22:37 +00:00
parent e1b47e5b62
commit bcac8e5adc
5 changed files with 24 additions and 49 deletions

View File

@@ -3,7 +3,7 @@ from datetime import datetime, timezone
from decimal import Decimal
from quart import (
request, render_template, render_template_string, make_response,
request, render_template, make_response,
Blueprint, g, redirect, url_for, jsonify,
)
@@ -219,27 +219,17 @@ def register():
select(sa_func.count()).select_from(CalendarEntry).where(*cal_filters)
) or 0
# Get product cart count via HTTP
from shared.infrastructure.cart_identity import current_cart_identity
from shared.infrastructure.data_client import fetch_data
from shared.contracts.dtos import CartSummaryDTO, dto_from_dict
from shared.infrastructure.fragments import fetch_fragment
ident = current_cart_identity()
summary_params = {}
frag_params = {"oob": "1"}
if ident["user_id"] is not None:
summary_params["user_id"] = ident["user_id"]
frag_params["user_id"] = str(ident["user_id"])
if ident["session_id"] is not None:
summary_params["session_id"] = ident["session_id"]
raw_summary = await fetch_data("cart", "cart-summary", params=summary_params, required=False)
cart_summary = dto_from_dict(CartSummaryDTO, raw_summary) if raw_summary else CartSummaryDTO()
product_count = cart_summary.count
total_count = product_count + cal_count
frag_params["session_id"] = ident["session_id"]
html = await render_template("_types/day/_main_panel.html")
mini_html = await render_template_string(
'{% from "_types/cart/_mini.html" import mini with context %}'
'{{ mini(oob="true") }}',
cart_count=total_count,
)
mini_html = await fetch_fragment("cart", "cart-mini", params=frag_params, required=False)
return await make_response(html + mini_html, 200)
@bp.get("/add/")