"""Cart app action endpoints. Exposes write operations at ``/internal/actions/`` for cross-app callers (login handler) via the internal action client. """ from __future__ import annotations from quart import Blueprint, g, jsonify, request from shared.infrastructure.actions import ACTION_HEADER from shared.services.registry import services def register() -> Blueprint: bp = Blueprint("actions", __name__, url_prefix="/internal/actions") @bp.before_request async def _require_action_header(): if not request.headers.get(ACTION_HEADER): return jsonify({"error": "forbidden"}), 403 _handlers: dict[str, object] = {} @bp.post("/") async def handle_action(action_name: str): handler = _handlers.get(action_name) if handler is None: return jsonify({"error": "unknown action"}), 404 try: result = await handler() return jsonify(result) except Exception as exc: import logging logging.getLogger(__name__).exception("Action %s failed", action_name) return jsonify({"error": str(exc)}), 500 # --- adopt-cart-for-user --- async def _adopt_cart(): data = await request.get_json() await services.cart.adopt_cart_for_user( g.s, data["user_id"], data["session_id"], ) return {"ok": True} _handlers["adopt-cart-for-user"] = _adopt_cart return bp