require('dotenv').config(); const database = require('../config/database'); const { hashPassword } = require('../middleware/auth'); const logger = require('../utils/logger'); async function seedDatabase() { try { await database.connect(); logger.info('Starting database seeding...'); // Create admin user const adminPassword = await hashPassword('admin123'); await database.query( 'INSERT INTO users (username, email, password_hash, role) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE id=id', ['admin', 'admin@aiagent.com', adminPassword, 'admin'] ); // Create operator user const operatorPassword = await hashPassword('operator123'); await database.query( 'INSERT INTO users (username, email, password_hash, role) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE id=id', ['operator', 'operator@aiagent.com', operatorPassword, 'operator'] ); // Create viewer user const viewerPassword = await hashPassword('viewer123'); await database.query( 'INSERT INTO users (username, email, password_hash, role) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE id=id', ['viewer', 'viewer@aiagent.com', viewerPassword, 'viewer'] ); // Create sample devices const sampleDevices = [ { device_id: 'sensor-001', name: 'Temperature Sensor 1', device_type: 'temperature_sensor', status: 'online' }, { device_id: 'sensor-002', name: 'Humidity Sensor 1', device_type: 'humidity_sensor', status: 'online' }, { device_id: 'actuator-001', name: 'Smart Valve 1', device_type: 'actuator', status: 'online' }, { device_id: 'gateway-001', name: 'IoT Gateway 1', device_type: 'gateway', status: 'online' } ]; for (const device of sampleDevices) { await database.query( 'INSERT INTO devices (device_id, name, device_type, status) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE id=id', [device.device_id, device.name, device.device_type, device.status] ); } // Create sample device data const sampleData = [ { device_id: 'sensor-001', raw_data: JSON.stringify({ temperature: 24.5, humidity: 45.2, timestamp: new Date().toISOString() }), timestamp: new Date() }, { device_id: 'sensor-002', raw_data: JSON.stringify({ humidity: 52.8, pressure: 1013.25, timestamp: new Date().toISOString() }), timestamp: new Date() } ]; for (const data of sampleData) { await database.query( 'INSERT INTO device_data (device_id, raw_data, timestamp) VALUES (?, ?, ?)', [data.device_id, data.raw_data, data.timestamp] ); } // Create sample alerts const sampleAlerts = [ { device_id: 'sensor-001', type: 'temperature_high', severity: 'warning', message: 'Temperature is above normal range', status: 'active' }, { device_id: 'sensor-002', type: 'humidity_low', severity: 'info', message: 'Humidity is below normal range', status: 'active' } ]; for (const alert of sampleAlerts) { await database.query( 'INSERT INTO alerts (device_id, type, severity, message, status) VALUES (?, ?, ?, ?, ?)', [alert.device_id, alert.type, alert.severity, alert.message, alert.status] ); } logger.info('Database seeding completed successfully'); logger.info('Default users created:'); logger.info('- admin/admin123 (admin@aiagent.com)'); logger.info('- operator/operator123 (operator@aiagent.com)'); logger.info('- viewer/viewer123 (viewer@aiagent.com)'); } catch (error) { logger.error('Database seeding failed:', error); process.exit(1); } finally { await database.disconnect(); } } if (require.main === module) { seedDatabase(); } module.exports = { seedDatabase };