188 lines
6.1 KiB
Python
188 lines
6.1 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Script to create 3 real users with 3 paid packages (Starter, Growth, Scale)
|
|
All accounts will be active and properly configured.
|
|
Email format: plan-name@igny8.com
|
|
"""
|
|
import os
|
|
import django
|
|
import sys
|
|
from decimal import Decimal
|
|
|
|
# Setup Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'igny8_core.settings')
|
|
django.setup()
|
|
|
|
from django.db import transaction
|
|
from igny8_core.auth.models import Plan, Account, User
|
|
from django.utils.text import slugify
|
|
|
|
# User data - 3 users with 3 different paid plans
|
|
# Email format: plan-name@igny8.com
|
|
USERS_DATA = [
|
|
{
|
|
"email": "starter@igny8.com",
|
|
"username": "starter",
|
|
"first_name": "Starter",
|
|
"last_name": "Account",
|
|
"password": "SecurePass123!@#",
|
|
"plan_slug": "starter", # $89/month
|
|
"account_name": "Starter Account",
|
|
},
|
|
{
|
|
"email": "growth@igny8.com",
|
|
"username": "growth",
|
|
"first_name": "Growth",
|
|
"last_name": "Account",
|
|
"password": "SecurePass123!@#",
|
|
"plan_slug": "growth", # $139/month
|
|
"account_name": "Growth Account",
|
|
},
|
|
{
|
|
"email": "scale@igny8.com",
|
|
"username": "scale",
|
|
"first_name": "Scale",
|
|
"last_name": "Account",
|
|
"password": "SecurePass123!@#",
|
|
"plan_slug": "scale", # $229/month
|
|
"account_name": "Scale Account",
|
|
},
|
|
]
|
|
|
|
|
|
def create_user_with_plan(user_data):
|
|
"""Create a user with account and assigned plan."""
|
|
try:
|
|
with transaction.atomic():
|
|
# Get the plan
|
|
try:
|
|
plan = Plan.objects.get(slug=user_data['plan_slug'], is_active=True)
|
|
except Plan.DoesNotExist:
|
|
print(f"❌ ERROR: Plan '{user_data['plan_slug']}' not found or inactive!")
|
|
return None
|
|
|
|
# Check if user already exists
|
|
if User.objects.filter(email=user_data['email']).exists():
|
|
print(f"⚠️ User {user_data['email']} already exists. Updating...")
|
|
existing_user = User.objects.get(email=user_data['email'])
|
|
if existing_user.account:
|
|
existing_user.account.plan = plan
|
|
existing_user.account.status = 'active'
|
|
existing_user.account.save()
|
|
print(f" ✅ Updated account plan to {plan.name} and set status to active")
|
|
return existing_user
|
|
|
|
# Generate unique account slug
|
|
base_slug = slugify(user_data['account_name'])
|
|
account_slug = base_slug
|
|
counter = 1
|
|
while Account.objects.filter(slug=account_slug).exists():
|
|
account_slug = f"{base_slug}-{counter}"
|
|
counter += 1
|
|
|
|
# Create user first (without account)
|
|
user = User.objects.create_user(
|
|
username=user_data['username'],
|
|
email=user_data['email'],
|
|
password=user_data['password'],
|
|
first_name=user_data['first_name'],
|
|
last_name=user_data['last_name'],
|
|
account=None, # Will be set after account creation
|
|
role='owner'
|
|
)
|
|
|
|
# Create account with user as owner and assigned plan
|
|
account = Account.objects.create(
|
|
name=user_data['account_name'],
|
|
slug=account_slug,
|
|
owner=user,
|
|
plan=plan,
|
|
status='active', # Set to active
|
|
credits=plan.included_credits or 0, # Set initial credits from plan
|
|
)
|
|
|
|
# Update user to reference the new account
|
|
user.account = account
|
|
user.save()
|
|
|
|
print(f"✅ Created user: {user.email}")
|
|
print(f" - Name: {user.get_full_name()}")
|
|
print(f" - Username: {user.username}")
|
|
print(f" - Account: {account.name} (slug: {account.slug})")
|
|
print(f" - Plan: {plan.name} (${plan.price}/month)")
|
|
print(f" - Status: {account.status}")
|
|
print(f" - Credits: {account.credits}")
|
|
print(f" - Max Sites: {plan.max_sites}")
|
|
print(f" - Max Users: {plan.max_users}")
|
|
print()
|
|
|
|
return user
|
|
|
|
except Exception as e:
|
|
print(f"❌ ERROR creating user {user_data['email']}: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return None
|
|
|
|
|
|
def main():
|
|
"""Main function to create all users."""
|
|
print("=" * 80)
|
|
print("Creating 3 Users with Paid Plans")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
# Verify plans exist
|
|
print("Checking available plans...")
|
|
plans = Plan.objects.filter(is_active=True).order_by('price')
|
|
if plans.count() < 3:
|
|
print(f"⚠️ WARNING: Only {plans.count()} active plan(s) found. Need at least 3.")
|
|
print("Available plans:")
|
|
for p in plans:
|
|
print(f" - {p.slug} (${p.price})")
|
|
print()
|
|
print("Please run import_plans.py first to create the plans.")
|
|
return
|
|
|
|
print("✅ Found plans:")
|
|
for p in plans:
|
|
print(f" - {p.name} ({p.slug}): ${p.price}/month")
|
|
print()
|
|
|
|
# Create users
|
|
created_users = []
|
|
for user_data in USERS_DATA:
|
|
user = create_user_with_plan(user_data)
|
|
if user:
|
|
created_users.append(user)
|
|
|
|
# Summary
|
|
print("=" * 80)
|
|
print("SUMMARY")
|
|
print("=" * 80)
|
|
print(f"Total users created/updated: {len(created_users)}")
|
|
print()
|
|
print("User Login Credentials:")
|
|
print("-" * 80)
|
|
for user_data in USERS_DATA:
|
|
print(f"Email: {user_data['email']}")
|
|
print(f"Password: {user_data['password']}")
|
|
print(f"Plan: {user_data['plan_slug'].title()}")
|
|
print()
|
|
|
|
print("✅ All users created successfully!")
|
|
print()
|
|
print("You can now log in with any of these accounts at:")
|
|
print("https://app.igny8.com/login")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except Exception as e:
|
|
print(f"❌ Fatal error: {e}", file=sys.stderr)
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|