File size: 3,223 Bytes
11f4e50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import mongoose from 'mongoose';
import { User, Preset } from './models';
import { config } from './config';
import { logger } from './utils/logger';

async function seed(): Promise<void> {
    try {
        await mongoose.connect(config.mongodb.uri);
        logger.info('Connected to MongoDB for seeding');

        // Create admin user
        const adminExists = await User.findOne({ email: 'admin@director.ai' });
        if (!adminExists) {
            const admin = new User({
                email: 'admin@director.ai',
                password: 'admin12345',
                role: 'admin',
                subscription: 'studio',
            });
            await admin.save();
            logger.info('Admin user created: admin@director.ai');
        }

        // Create demo user
        const demoExists = await User.findOne({ email: 'demo@director.ai' });
        if (!demoExists) {
            const demo = new User({
                email: 'demo@director.ai',
                password: 'demo12345',
                role: 'user',
                subscription: 'free',
            });
            await demo.save();

            // Create sample presets for demo user
            const presets = [
                {
                    userId: demo._id,
                    name: 'Minimal Clean',
                    voice: { type: 'neutral', language: 'en', tone: 'calm', speed: 1.0 },
                    fonts: { primary: 'Playfair Display', secondary: 'Montserrat' },
                    colors: { primary: '#1A1A1A', secondary: '#F5F5F5', accent: '#D4AF37' },
                    transitions: 'fade',
                    videoStyle: 'minimal',
                },
                {
                    userId: demo._id,
                    name: 'Dynamic Bold',
                    voice: { type: 'energetic', language: 'en', tone: 'upbeat', speed: 1.2 },
                    fonts: { primary: 'Montserrat', secondary: 'Inter' },
                    colors: { primary: '#0A0A0A', secondary: '#FFFFFF', accent: '#FF6B35' },
                    transitions: 'slide',
                    videoStyle: 'dynamic',
                },
                {
                    userId: demo._id,
                    name: 'Cinematic Elegant',
                    voice: { type: 'deep', language: 'en', tone: 'dramatic', speed: 0.9 },
                    fonts: { primary: 'Playfair Display', secondary: 'Lora' },
                    colors: { primary: '#0D1117', secondary: '#E6E6E6', accent: '#C9A55C' },
                    transitions: 'dissolve',
                    videoStyle: 'cinematic',
                },
            ];

            for (const presetData of presets) {
                const preset = new Preset(presetData);
                await preset.save();
                demo.presets.push(preset._id as any);
            }
            await demo.save();
            logger.info('Demo user and presets created: demo@director.ai');
        }

        logger.info('Seeding complete');
        process.exit(0);
    } catch (error) {
        logger.error('Seeding failed:', error);
        process.exit(1);
    }
}

seed();