#!/usr/bin/env node /** * Database Initialization Script for Docker Deployment * Runs migrations and creates admin user automatically */ const bcrypt = require('bcrypt'); const { sequelize, testConnection } = require('../config/database'); const { User } = require('../models'); async function initDatabase() { try { console.log('🔄 Initializing database...'); // Test connection await testConnection(); // Run migrations (sync models) console.log('📋 Running database migrations...'); await sequelize.sync({ force: false, alter: true }); console.log('✅ Database migrations completed'); // Check if admin user exists const existingAdmin = await User.findOne({ where: { email: 'admin@oliver.agency' } }); if (!existingAdmin) { // Create admin user console.log('👑 Creating admin user...'); const hashedPassword = await bcrypt.hash('admin123', 10); await User.create({ email: 'admin@oliver.agency', name: 'Administrator', password: hashedPassword, isActive: true, preferences: { theme: 'light', notifications: true, defaultAssistant: 'creator-bot-push-the-boundaries-of-technology', role: 'admin', allowedAgents: null, } }); console.log('✅ Admin user created: admin@oliver.agency / admin123'); } else { console.log('👑 Admin user already exists'); } // Run seed data (agents) console.log('🌱 Seeding initial data...'); const seedScript = require('../migrations/seed'); await seedScript(); console.log('🎉 Database initialization completed successfully!'); console.log('📋 Admin login: admin@oliver.agency / admin123'); } catch (error) { console.error('❌ Database initialization failed:', error); throw error; } } // Run if called directly if (require.main === module) { initDatabase() .then(() => process.exit(0)) .catch(() => process.exit(1)); } module.exports = initDatabase;