139 lines
4.0 KiB
JavaScript
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 };
|