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