Files
drone-detector/server/seedDatabase.js
2025-08-18 06:30:42 +02:00

163 lines
5.6 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: 58.971724,
geo_lon: 18.121915,
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
},
{
user_id: adminUser.id,
name: 'Orlan Military Drone Detection Alert',
description: 'Emergency alert for any Orlan military drone detection regardless of location',
is_active: true,
device_ids: [], // All devices
drone_types: [1], // Only Orlan drones (type 1)
min_rssi: -100, // Any RSSI level
priority: 'critical',
min_threat_level: null, // No minimum threat level (will trigger on any Orlan)
alert_channels: ['sms'],
sms_phone_number: '0736419592', // Emergency contact
cooldown_period: 60, // Short cooldown for critical threats
min_detections: 1,
time_window: 30 // Short time window for immediate response
}
]);
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;