# app/modules/payments/definition.py """ Payments module definition. Defines the payments module including its features, menu items, and route configurations. The payments module provides gateway abstractions that can be used by: - billing module: For platform subscriptions and invoices - orders module: For customer checkout payments This separation allows: 1. Using payments standalone (e.g., one-time payments without subscriptions) 2. Billing without orders (platform subscription only) 3. Orders without billing (customer payments only) """ from app.modules.base import ModuleDefinition, PermissionDefinition from app.modules.enums import FrontendType def _get_admin_router(): """Lazy import of admin router to avoid circular imports.""" from app.modules.payments.routes.api.admin import router return router def _get_store_router(): """Lazy import of store router to avoid circular imports.""" from app.modules.payments.routes.api.store import router return router # Payments module definition payments_module = ModuleDefinition( code="payments", name="Payment Gateways", description=( "Core payment gateway integrations for Stripe, PayPal, and bank transfers. " "Provides payment processing, refunds, and payment method management. " "Required by billing module for subscription payments." ), version="1.0.0", features=[ "payment_processing", # Process payments "payment_refunds", # Issue refunds "payment_methods", # Store payment methods "stripe_gateway", # Stripe integration "paypal_gateway", # PayPal integration "bank_transfer", # Bank transfer support "transaction_history", # Transaction records ], # Module-driven permissions permissions=[ PermissionDefinition( id="payments.view_gateways", label_key="payments.permissions.view_gateways", description_key="payments.permissions.view_gateways_desc", category="payments", ), PermissionDefinition( id="payments.manage_gateways", label_key="payments.permissions.manage_gateways", description_key="payments.permissions.manage_gateways_desc", category="payments", ), PermissionDefinition( id="payments.view_transactions", label_key="payments.permissions.view_transactions", description_key="payments.permissions.view_transactions_desc", category="payments", ), ], menu_items={ FrontendType.ADMIN: [ "payment-gateways", # Configure payment gateways ], FrontendType.STORE: [ "payment-methods", # Manage stored payment methods ], }, is_core=True, # Core module - required for billing and subscription management is_internal=False, # ========================================================================= # Self-Contained Module Configuration # ========================================================================= is_self_contained=True, services_path="app.modules.payments.services", models_path="app.modules.payments.models", schemas_path="app.modules.payments.schemas", exceptions_path="app.modules.payments.exceptions", ) def get_payments_module_with_routers() -> ModuleDefinition: """ Get payments module with routers attached. This function attaches the routers lazily to avoid circular imports during module initialization. """ payments_module.admin_router = _get_admin_router() payments_module.store_router = _get_store_router() return payments_module __all__ = ["payments_module", "get_payments_module_with_routers"]