147 lines
4.9 KiB
JavaScript
147 lines
4.9 KiB
JavaScript
const bcrypt = require('bcryptjs');
|
|
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',
|
|
min_threat_level: 'critical', // Only alert on critical threats
|
|
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',
|
|
min_threat_level: 'critical', // Only alert on critical threats
|
|
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',
|
|
min_threat_level: 'critical', // Only alert on critical threats
|
|
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;
|