# app/modules/messaging/services/messaging_features.py """ Messaging feature provider for the billing feature system. Declares messaging-related billable features (basic messaging, email templates, bulk 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 MessagingFeatureProvider: """Feature provider for the messaging module. Declares: - messaging_basic: binary merchant-level feature for basic messaging - email_templates: binary merchant-level feature for custom email templates - bulk_messaging: binary merchant-level feature for bulk messaging """ @property def feature_category(self) -> str: return "messaging" def get_feature_declarations(self) -> list[FeatureDeclaration]: return [ FeatureDeclaration( code="messaging_basic", name_key="messaging.features.messaging_basic.name", description_key="messaging.features.messaging_basic.description", category="messaging", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="mail", display_order=10, ), FeatureDeclaration( code="email_templates", name_key="messaging.features.email_templates.name", description_key="messaging.features.email_templates.description", category="messaging", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="file-text", display_order=20, ), FeatureDeclaration( code="bulk_messaging", name_key="messaging.features.bulk_messaging.name", description_key="messaging.features.bulk_messaging.description", category="messaging", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="send", 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 messaging_feature_provider = MessagingFeatureProvider() __all__ = [ "MessagingFeatureProvider", "messaging_feature_provider", ]