File size: 3,118 Bytes
17847d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""
Initialization script for default subscription plans
Run this script to create/update the default Free, Pro, and Ultra plans
"""
import sys
import os
from pathlib import Path

# Add parent directory to path to allow imports
sys.path.insert(0, str(Path(__file__).parent.parent.parent))

from sqlalchemy.orm import Session
from app.db import SessionLocal, engine, Base
from app.services.plan_service import plan_service
from app.models import SubscriptionPlan
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def init_database():
    """Create all database tables"""
    logger.info("Creating database tables...")
    Base.metadata.create_all(bind=engine)
    logger.info("Database tables created successfully")


def init_plans(db: Session, force: bool = False):
    """
    Initialize default subscription plans
    
    Args:
        db: Database session
        force: If True, update existing plans with new values
    """
    logger.info("Initializing subscription plans...")
    
    plans = plan_service.initialize_default_plans(db, force=force)
    
    logger.info(f"Successfully initialized {len(plans)} plans:")
    for plan in plans:
        logger.info(f"  - {plan.name}: ${plan.price_monthly}/month, {plan.credits_per_month} credits")
    
    return plans


def main():
    """Main initialization function"""
    import argparse
    
    parser = argparse.ArgumentParser(description="Initialize subscription plans")
    parser.add_argument(
        "--force",
        action="store_true",
        help="Force update of existing plans"
    )
    parser.add_argument(
        "--create-tables",
        action="store_true",
        help="Create database tables if they don't exist"
    )
    
    args = parser.parse_args()
    
    # Create tables if requested
    if args.create_tables:
        init_database()
    
    # Initialize plans
    db = SessionLocal()
    try:
        plans = init_plans(db, force=args.force)
        logger.info("✓ Plan initialization complete!")
        
        # Display plan details
        print("\n" + "="*60)
        print("SUBSCRIPTION PLANS")
        print("="*60)
        for plan in plans:
            print(f"\n{plan.name} Tier:")
            print(f"  Price: ${plan.price_monthly}/month")
            print(f"  Credits: {plan.credits_per_month}/month")
            print(f"  Per Dashboard: {plan.credits_per_analyze} credits")
            print(f"  Per Edit: {plan.credits_per_edit} credits")
            print(f"  Stripe Price ID (Monthly): {plan.stripe_price_id_monthly or plan.stripe_price_id or 'Not set'}")
            print(f"  Stripe Price ID (Yearly): {plan.stripe_price_id_yearly or 'Not set'}")
            if plan.features:
                print(f"  Features: {', '.join(str(k) + '=' + str(v) for k, v in plan.features.items())}")
        print("\n" + "="*60)
        
    except Exception as e:
        logger.error(f"Error initializing plans: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
    finally:
        db.close()


if __name__ == "__main__":
    main()