# app/modules/cart/definition.py """ Cart module definition. This module provides shopping cart functionality for customer storefronts. It is session-based and does not require customer authentication. """ from app.modules.base import ( MenuItemDefinition, MenuSectionDefinition, ModuleDefinition, PermissionDefinition, ) from app.modules.enums import FrontendType # ============================================================================= # Router Lazy Imports # ============================================================================= def _get_storefront_router(): """Lazy import of storefront router to avoid circular imports.""" from app.modules.cart.routes.api.storefront import router return router # Cart module definition cart_module = ModuleDefinition( code="cart", name="Shopping Cart", description="Session-based shopping cart for storefronts", version="1.0.0", is_self_contained=True, requires=["inventory", "catalog"], # Checks inventory availability and references Product model migrations_path="migrations", features=[ "cart_management", # Basic cart CRUD operations "cart_persistence", # Session and database persistence "cart_item_operations", # Add, update, remove items "shipping_calculation", # Calculate shipping for cart "promotion_application", # Apply discounts and promotions ], # Note: Cart is primarily session-based storefront functionality. # These permissions are for admin access to cart data/settings. permissions=[ PermissionDefinition( id="cart.view", label_key="cart.permissions.view", description_key="cart.permissions.view_desc", category="cart", ), PermissionDefinition( id="cart.manage", label_key="cart.permissions.manage", description_key="cart.permissions.manage_desc", category="cart", ), ], # Cart is storefront-only - no admin/store menus needed menus={ FrontendType.STOREFRONT: [ MenuSectionDefinition( id="actions", label_key=None, order=10, items=[ MenuItemDefinition( id="cart", label_key="cart.storefront.actions.cart", icon="shopping-cart", route="cart", order=20, ), ], ), ], }, ) def get_cart_module_with_routers() -> ModuleDefinition: """ Get cart module with routers attached. This function attaches the routers lazily to avoid circular imports during module initialization. """ cart_module.storefront_router = _get_storefront_router() return cart_module __all__ = ["cart_module", "get_cart_module_with_routers"]