# app/modules/customers/services/customer_features.py """ Customer feature provider for the billing feature system. Declares customer-related billable features (view, export, messaging) for feature gating. """ from __future__ import annotations import logging from typing import TYPE_CHECKING from app.modules.contracts.features import ( FeatureDeclaration, FeatureScope, FeatureType, FeatureUsage, ) if TYPE_CHECKING: from sqlalchemy.orm import Session logger = logging.getLogger(__name__) class CustomerFeatureProvider: """Feature provider for the customers module. Declares: - customer_view: binary merchant-level feature for viewing customer data - customer_export: binary merchant-level feature for exporting customer data - customer_messaging: binary merchant-level feature for customer messaging """ @property def feature_category(self) -> str: return "customers" def get_feature_declarations(self) -> list[FeatureDeclaration]: return [ FeatureDeclaration( code="customer_view", name_key="customers.features.customer_view.name", description_key="customers.features.customer_view.description", category="customers", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="eye", display_order=10, ), FeatureDeclaration( code="customer_export", name_key="customers.features.customer_export.name", description_key="customers.features.customer_export.description", category="customers", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="download", display_order=20, ), FeatureDeclaration( code="customer_messaging", name_key="customers.features.customer_messaging.name", description_key="customers.features.customer_messaging.description", category="customers", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="message-circle", display_order=30, ), ] def get_store_usage( self, db: Session, store_id: int, ) -> list[FeatureUsage]: return [] def get_merchant_usage( self, db: Session, merchant_id: int, platform_id: int, ) -> list[FeatureUsage]: return [] # Singleton instance for module registration customer_feature_provider = CustomerFeatureProvider() __all__ = [ "CustomerFeatureProvider", "customer_feature_provider", ]