Add subcription feature
This commit is contained in:
@@ -10,6 +10,7 @@ Multi-tenant management and subscription handling
|
||||
|
||||
from shared.config.base import BaseServiceSettings
|
||||
import os
|
||||
from typing import Dict, Tuple, ClassVar
|
||||
|
||||
class TenantSettings(BaseServiceSettings):
|
||||
"""Tenant service specific settings"""
|
||||
@@ -66,6 +67,17 @@ class TenantSettings(BaseServiceSettings):
|
||||
BILLING_CURRENCY: str = os.getenv("BILLING_CURRENCY", "EUR")
|
||||
BILLING_CYCLE_DAYS: int = int(os.getenv("BILLING_CYCLE_DAYS", "30"))
|
||||
|
||||
# Stripe Proration Configuration
|
||||
DEFAULT_PRORATION_BEHAVIOR: str = os.getenv("DEFAULT_PRORATION_BEHAVIOR", "create_prorations")
|
||||
UPGRADE_PRORATION_BEHAVIOR: str = os.getenv("UPGRADE_PRORATION_BEHAVIOR", "create_prorations")
|
||||
DOWNGRADE_PRORATION_BEHAVIOR: str = os.getenv("DOWNGRADE_PRORATION_BEHAVIOR", "none")
|
||||
BILLING_CYCLE_CHANGE_PRORATION: str = os.getenv("BILLING_CYCLE_CHANGE_PRORATION", "create_prorations")
|
||||
|
||||
# Stripe Subscription Update Settings
|
||||
STRIPE_BILLING_CYCLE_ANCHOR: str = os.getenv("STRIPE_BILLING_CYCLE_ANCHOR", "unchanged")
|
||||
STRIPE_PAYMENT_BEHAVIOR: str = os.getenv("STRIPE_PAYMENT_BEHAVIOR", "error_if_incomplete")
|
||||
ALLOW_IMMEDIATE_SUBSCRIPTION_CHANGES: bool = os.getenv("ALLOW_IMMEDIATE_SUBSCRIPTION_CHANGES", "true").lower() == "true"
|
||||
|
||||
# Resource Limits
|
||||
MAX_API_CALLS_PER_MINUTE: int = int(os.getenv("MAX_API_CALLS_PER_MINUTE", "100"))
|
||||
MAX_STORAGE_MB: int = int(os.getenv("MAX_STORAGE_MB", "1024"))
|
||||
@@ -89,6 +101,24 @@ class TenantSettings(BaseServiceSettings):
|
||||
STRIPE_PUBLISHABLE_KEY: str = os.getenv("STRIPE_PUBLISHABLE_KEY", "")
|
||||
STRIPE_SECRET_KEY: str = os.getenv("STRIPE_SECRET_KEY", "")
|
||||
STRIPE_WEBHOOK_SECRET: str = os.getenv("STRIPE_WEBHOOK_SECRET", "")
|
||||
|
||||
# Stripe Price IDs for subscription plans
|
||||
STARTER_MONTHLY_PRICE_ID: str = os.getenv("STARTER_MONTHLY_PRICE_ID", "price_1Sp0p3IzCdnBmAVT2Gs7z5np")
|
||||
STARTER_YEARLY_PRICE_ID: str = os.getenv("STARTER_YEARLY_PRICE_ID", "price_1Sp0twIzCdnBmAVTD1lNLedx")
|
||||
PROFESSIONAL_MONTHLY_PRICE_ID: str = os.getenv("PROFESSIONAL_MONTHLY_PRICE_ID", "price_1Sp0w7IzCdnBmAVTp0Jxhh1u")
|
||||
PROFESSIONAL_YEARLY_PRICE_ID: str = os.getenv("PROFESSIONAL_YEARLY_PRICE_ID", "price_1Sp0yAIzCdnBmAVTLoGl4QCb")
|
||||
ENTERPRISE_MONTHLY_PRICE_ID: str = os.getenv("ENTERPRISE_MONTHLY_PRICE_ID", "price_1Sp0zAIzCdnBmAVTXpApF7YO")
|
||||
ENTERPRISE_YEARLY_PRICE_ID: str = os.getenv("ENTERPRISE_YEARLY_PRICE_ID", "price_1Sp15mIzCdnBmAVTuxffMpV5")
|
||||
|
||||
# Price ID mapping for easy lookup
|
||||
STRIPE_PRICE_ID_MAPPING: ClassVar[Dict[Tuple[str, str], str]] = {
|
||||
('starter', 'monthly'): STARTER_MONTHLY_PRICE_ID,
|
||||
('starter', 'yearly'): STARTER_YEARLY_PRICE_ID,
|
||||
('professional', 'monthly'): PROFESSIONAL_MONTHLY_PRICE_ID,
|
||||
('professional', 'yearly'): PROFESSIONAL_YEARLY_PRICE_ID,
|
||||
('enterprise', 'monthly'): ENTERPRISE_MONTHLY_PRICE_ID,
|
||||
('enterprise', 'yearly'): ENTERPRISE_YEARLY_PRICE_ID,
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# SCHEDULER CONFIGURATION
|
||||
|
||||
Reference in New Issue
Block a user