const path = require('path'); const bcrypt = require('bcryptjs'); // Load environment variables from the project root require('dotenv').config({ path: path.join(__dirname, '..', '.env') }); console.log('šŸ‘¤ Prep101 User Management Script'); console.log('================================'); const { sequelize } = require('../database/connection'); const User = require('../models/User'); const addUser = async () => { try { // Get command line arguments const args = process.argv.slice(2); if (args.length < 3) { console.log('āŒ Usage: node scripts/add-user.js [access-level]'); console.log(' access-level options: free, starter, premium, early-beta, premium-beta, admin-beta'); console.log(' Example: node scripts/add-user.js john@example.com "John Doe" password123 early-beta'); process.exit(1); } const [email, name, password, accessLevel = 'free'] = args; // Debug: Log the arguments received console.log('šŸ” Debug - Arguments received:'); console.log(' Email:', email); console.log(' Name:', name); console.log(' Password:', password ? '[HIDDEN]' : 'undefined'); console.log(' Access Level:', accessLevel); console.log(' Total args:', args.length); // Connect to database await sequelize.authenticate(); console.log('āœ… Connected to database'); // Check if user already exists const existingUser = await User.findOne({ where: { email } }); if (existingUser) { console.log('āŒ User already exists with that email'); process.exit(1); } // Hash password const hashedPassword = await bcrypt.hash(password, 12); // Determine subscription and limits based on access level let subscription, guidesLimit, isBetaTester, betaAccessLevel, betaStatus, betaFeatures; switch (accessLevel) { case 'free': subscription = 'free'; guidesLimit = 1; isBetaTester = false; break; case 'starter': subscription = 'starter'; guidesLimit = 3; isBetaTester = false; break; case 'premium': subscription = 'premium'; guidesLimit = 10; isBetaTester = false; break; case 'early-beta': subscription = 'free'; guidesLimit = 25; isBetaTester = true; betaAccessLevel = 'early'; betaStatus = 'active'; betaFeatures = ['early-access', 'priority-support']; break; case 'premium-beta': subscription = 'free'; guidesLimit = 100; isBetaTester = true; betaAccessLevel = 'premium'; betaStatus = 'active'; betaFeatures = ['early-access', 'priority-support', 'advanced-rag', 'bulk-guide-generation']; break; case 'admin-beta': subscription = 'free'; guidesLimit = 999; isBetaTester = true; betaAccessLevel = 'admin'; betaStatus = 'active'; betaFeatures = ['early-access', 'priority-support', 'advanced-rag', 'bulk-guide-generation', 'custom-methodology', 'advanced-analytics', 'api-access']; break; default: console.log('āŒ Invalid access level. Use: free, starter, premium, early-beta, premium-beta, or admin-beta'); process.exit(1); } // Create user const user = await User.create({ email, name, password: hashedPassword, subscription, guidesLimit, guidesUsed: 0, isBetaTester, betaAccessLevel, betaStatus, betaFeatures, betaStartedAt: isBetaTester ? new Date() : null }); console.log('āœ… User created successfully!'); console.log('šŸ“§ Email:', user.email); console.log('šŸ‘¤ Name:', user.name); console.log('šŸ’³ Subscription:', user.subscription); console.log('šŸ“š Guides Limit:', user.guidesLimit); if (user.isBetaTester) { console.log('šŸ”¬ Beta Tester: Yes'); console.log('šŸŽÆ Beta Level:', user.betaAccessLevel); console.log('✨ Beta Features:', user.betaFeatures.join(', ')); } console.log('\nšŸŽ‰ User can now log in at https://childactor101.sbs/login'); process.exit(0); } catch (error) { console.error('āŒ Failed to create user:', error.message); console.error('Full error:', error); process.exit(1); } }; addUser();