# app/modules/billing/services/platform_pricing_service.py """ Platform pricing service. Handles database operations for subscription tiers and add-on products. """ from sqlalchemy.orm import Session from app.modules.billing.models import ( AddOnProduct, SubscriptionTier, ) class PlatformPricingService: """Service for handling pricing data operations.""" def get_public_tiers(self, db: Session) -> list[SubscriptionTier]: """Get all public subscription tiers from the database.""" return ( db.query(SubscriptionTier) .filter( SubscriptionTier.is_active == True, SubscriptionTier.is_public == True, ) .order_by(SubscriptionTier.display_order) .all() ) def get_tier_by_code( self, db: Session, tier_code: str, platform_id: int | None = None ) -> SubscriptionTier | None: """Get a specific tier by code from the database, optionally scoped to a platform.""" query = db.query(SubscriptionTier).filter( SubscriptionTier.code == tier_code, SubscriptionTier.is_active == True, ) if platform_id is not None: query = query.filter(SubscriptionTier.platform_id == platform_id) return query.first() def get_active_addons(self, db: Session) -> list[AddOnProduct]: """Get all active add-on products from the database.""" return ( db.query(AddOnProduct) .filter(AddOnProduct.is_active == True) .order_by(AddOnProduct.category, AddOnProduct.display_order) .all() ) # Singleton instance platform_pricing_service = PlatformPricingService()