iot-agent/scripts/seed.js
2025-08-03 23:07:33 +05:30

139 lines
4.0 KiB
JavaScript

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 };