# app/modules/inventory/services/inventory_features.py """ Inventory feature provider for the billing feature system. Declares inventory-related billable features (basic inventory, locations, purchase orders, low stock alerts) 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 InventoryFeatureProvider: """Feature provider for the inventory module. Declares: - inventory_basic: binary merchant-level feature for basic inventory management - inventory_locations: binary merchant-level feature for multi-location inventory - inventory_purchase_orders: binary merchant-level feature for purchase orders - low_stock_alerts: binary merchant-level feature for low stock alert notifications """ @property def feature_category(self) -> str: return "inventory" def get_feature_declarations(self) -> list[FeatureDeclaration]: return [ FeatureDeclaration( code="inventory_basic", name_key="inventory.features.inventory_basic.name", description_key="inventory.features.inventory_basic.description", category="inventory", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="box", display_order=10, ), FeatureDeclaration( code="inventory_locations", name_key="inventory.features.inventory_locations.name", description_key="inventory.features.inventory_locations.description", category="inventory", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="map-pin", display_order=20, ), FeatureDeclaration( code="inventory_purchase_orders", name_key="inventory.features.inventory_purchase_orders.name", description_key="inventory.features.inventory_purchase_orders.description", category="inventory", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="file-plus", display_order=30, ), FeatureDeclaration( code="low_stock_alerts", name_key="inventory.features.low_stock_alerts.name", description_key="inventory.features.low_stock_alerts.description", category="inventory", feature_type=FeatureType.BINARY, scope=FeatureScope.MERCHANT, ui_icon="alert-triangle", display_order=40, ), ] 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 inventory_feature_provider = InventoryFeatureProvider() __all__ = [ "InventoryFeatureProvider", "inventory_feature_provider", ]