# app/exceptions/feature.py """ Feature management exceptions. """ from app.exceptions.base import ResourceNotFoundException, ValidationException class FeatureNotFoundError(ResourceNotFoundException): """Feature not found.""" def __init__(self, feature_code: str): super().__init__( resource_type="Feature", identifier=feature_code, message=f"Feature '{feature_code}' not found", ) self.feature_code = feature_code class TierNotFoundError(ResourceNotFoundException): """Subscription tier not found.""" def __init__(self, tier_code: str): super().__init__( resource_type="SubscriptionTier", identifier=tier_code, message=f"Tier '{tier_code}' not found", ) self.tier_code = tier_code class InvalidFeatureCodesError(ValidationException): """Invalid feature codes provided.""" def __init__(self, invalid_codes: set[str]): codes_str = ", ".join(sorted(invalid_codes)) super().__init__( message=f"Invalid feature codes: {codes_str}", details={"invalid_codes": list(invalid_codes)}, ) self.invalid_codes = invalid_codes