const bcrypt = require('bcrypt'); const { User, Device, AlertRule } = require('./models'); async function seedDatabase() { try { console.log('🌱 Seeding database...'); // Check if admin user exists const existingAdmin = await User.findOne({ where: { username: 'admin' } }); if (!existingAdmin) { // Create default admin user const adminPassword = await bcrypt.hash('admin123', 10); await User.create({ username: 'admin', email: 'admin@dronedetection.local', password_hash: adminPassword, first_name: 'System', last_name: 'Administrator', role: 'admin', is_active: true, sms_alerts_enabled: false, email_alerts_enabled: false, timezone: 'Europe/Stockholm' }); console.log('✅ Admin user created (username: admin, password: admin123)'); } else { console.log('✅ Admin user already exists'); } // Create sample devices if none exist const deviceCount = await Device.count(); if (deviceCount === 0) { await Device.bulkCreate([ { id: 1, name: 'Arlanda Airport Detector', geo_lat: 59.6519, geo_lon: 17.9186, location_description: 'Arlanda Airport Security Zone', is_active: true, last_heartbeat: new Date(), heartbeat_interval: 300, firmware_version: '1.0.0' }, { id: 2, name: 'Musk Naval Base Detector', geo_lat: 59.2753, geo_lon: 18.2649, location_description: 'Musk Naval Base Perimeter', is_active: true, last_heartbeat: new Date(), heartbeat_interval: 300, firmware_version: '1.0.0' }, { id: 3, name: 'Royal Castle Detector', geo_lat: 59.3268, geo_lon: 18.0717, location_description: 'Royal Castle Security Zone', is_active: true, last_heartbeat: new Date(), heartbeat_interval: 300, firmware_version: '1.0.0' } ]); console.log('✅ Three detector devices created (Arlanda, Naval Base, Royal Castle)'); } else { console.log('✅ Devices already exist'); } // Get admin user for alert rules const adminUser = await User.findOne({ where: { username: 'admin' } }); // Create location-specific alert rules const alertRuleCount = await AlertRule.count(); if (alertRuleCount === 0) { await AlertRule.bulkCreate([ { user_id: adminUser.id, name: 'Arlanda Airport Security Alert', description: 'High-priority drone detection alert for Arlanda Airport', is_active: true, device_ids: [1], // Arlanda detector only min_rssi: -85, // Alert on any detection priority: 'critical', alert_channels: ['sms'], sms_phone_number: '0736419592', cooldown_period: 300, // 5 minutes between alerts min_detections: 1, time_window: 60 // 1 minute window }, { user_id: adminUser.id, name: 'Muskö Naval Base Security Alert', description: 'High-priority drone detection alert for Muskö Naval Base', is_active: true, device_ids: [2], // Muskö detector only min_rssi: -85, // Alert on any detection priority: 'critical', alert_channels: ['sms'], sms_phone_number: '0739999999', cooldown_period: 300, // 5 minutes between alerts min_detections: 1, time_window: 60 // 1 minute window }, { user_id: adminUser.id, name: 'Royal Castle Security Alert', description: 'High-priority drone detection alert for Royal Castle', is_active: true, device_ids: [3], // Royal Castle detector only min_rssi: -85, // Alert on any detection priority: 'critical', alert_channels: ['sms'], sms_phone_number: '0739999999', cooldown_period: 300, // 5 minutes between alerts min_detections: 1, time_window: 60 // 1 minute window } ]); console.log('✅ Location-specific alert rules created:'); console.log(' - Arlanda Airport → 0736419592'); console.log(' - Muskö Naval Base → 073999999'); console.log(' - Royal Castle → 073999999'); } else { console.log('✅ Alert rules already exist'); } console.log('🌱 Database seeding completed'); } catch (error) { console.error('❌ Database seeding failed:', error); throw error; } } module.exports = seedDatabase;