diff --git a/cart/bp/fragments/routes.py b/cart/bp/fragments/routes.py index 6724837..c60cc52 100644 --- a/cart/bp/fragments/routes.py +++ b/cart/bp/fragments/routes.py @@ -32,7 +32,8 @@ def register(): g.s, user_id=user_id, session_id=session_id, ) count = summary.count + summary.calendar_count + summary.ticket_count - return await render_template("fragments/cart_mini.html", cart_count=count) + oob = request.args.get("oob", "") + return await render_template("fragments/cart_mini.html", cart_count=count, oob=oob) async def _account_nav_item(): from shared.infrastructure.urls import cart_url diff --git a/cart/templates/fragments/cart_mini.html b/cart/templates/fragments/cart_mini.html index 4725a02..3b500e6 100644 --- a/cart/templates/fragments/cart_mini.html +++ b/cart/templates/fragments/cart_mini.html @@ -1,4 +1,4 @@ -
+
{% if cart_count == 0 %}
Blueprint: # Load entry DTO for the widget template entry = await services.calendar.entry_by_id(g.s, entry_id) - # Updated cart count for OOB mini-cart - summary_params = {} + # Fetch OOB cart-mini fragment from cart service + from shared.infrastructure.fragments import fetch_fragment + 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) - summary = dto_from_dict(CartSummaryDTO, raw_summary) if raw_summary else CartSummaryDTO() - cart_count = summary.count + summary.calendar_count + summary.ticket_count + frag_params["session_id"] = ident["session_id"] - # Render widget + OOB cart-mini widget_html = await render_template( "_types/page_summary/_ticket_widget.html", entry=entry, qty=qty, ticket_url="/all-tickets/adjust", ) - mini_html = await render_template_string( - '{% from "_types/cart/_mini.html" import mini with context %}' - '{{ mini(oob="true") }}', - cart_count=cart_count, - ) + mini_html = await fetch_fragment("cart", "cart-mini", params=frag_params, required=False) return await make_response(widget_html + mini_html, 200) return bp diff --git a/events/bp/calendar_entries/routes.py b/events/bp/calendar_entries/routes.py index c965d5e..1417ec5 100644 --- a/events/bp/calendar_entries/routes.py +++ b/events/bp/calendar_entries/routes.py @@ -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/") diff --git a/events/bp/page/routes.py b/events/bp/page/routes.py index c327bf2..d88c7bf 100644 --- a/events/bp/page/routes.py +++ b/events/bp/page/routes.py @@ -8,12 +8,10 @@ Routes: """ from __future__ import annotations -from quart import Blueprint, g, request, render_template, render_template_string, make_response +from quart import Blueprint, g, request, render_template, make_response from shared.browser.app.utils.htmx import is_htmx_request 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.services.registry import services @@ -108,28 +106,21 @@ def register() -> Blueprint: # Load entry DTO for the widget template entry = await services.calendar.entry_by_id(g.s, entry_id) - # Updated cart count for OOB mini-cart - summary_params = {} + # Fetch OOB cart-mini fragment from cart service + from shared.infrastructure.fragments import fetch_fragment + 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) - summary = dto_from_dict(CartSummaryDTO, raw_summary) if raw_summary else CartSummaryDTO() - cart_count = summary.count + summary.calendar_count + summary.ticket_count + frag_params["session_id"] = ident["session_id"] - # Render widget + OOB cart-mini widget_html = await render_template( "_types/page_summary/_ticket_widget.html", entry=entry, qty=qty, ticket_url=f"/{g.post_slug}/tickets/adjust", ) - mini_html = await render_template_string( - '{% from "_types/cart/_mini.html" import mini with context %}' - '{{ mini(oob="true") }}', - cart_count=cart_count, - ) + mini_html = await fetch_fragment("cart", "cart-mini", params=frag_params, required=False) return await make_response(widget_html + mini_html, 200) return bp