75 lines
2.4 KiB
JavaScript
75 lines
2.4 KiB
JavaScript
const mongoose = require('mongoose');
|
||
const { migrateCompanies } = require('./migrate-companies');
|
||
require('dotenv').config({ path: '../../.env' });
|
||
|
||
const mongoUrl = process.env.MONGODB_URI || 'mongodb://admin:password@localhost:27017/procurement_db?authSource=admin';
|
||
|
||
// Migration history model
|
||
const migrationSchema = new mongoose.Schema({
|
||
name: { type: String, unique: true, required: true },
|
||
executedAt: { type: Date, default: Date.now },
|
||
status: { type: String, enum: ['completed', 'failed'], default: 'completed' },
|
||
message: String
|
||
}, { collection: 'migrations' });
|
||
|
||
const Migration = mongoose.model('Migration', migrationSchema);
|
||
|
||
async function initializeDatabase() {
|
||
try {
|
||
console.log('[Init] Connecting to MongoDB...');
|
||
await mongoose.connect(mongoUrl, {
|
||
useNewUrlParser: true,
|
||
useUnifiedTopology: true,
|
||
serverSelectionTimeoutMS: 5000,
|
||
connectTimeoutMS: 5000,
|
||
});
|
||
console.log('[Init] Connected to MongoDB\n');
|
||
|
||
// Check if migrations already ran
|
||
const migrateCompaniesRan = await Migration.findOne({ name: 'migrate-companies' });
|
||
|
||
if (!migrateCompaniesRan) {
|
||
console.log('[Init] Running migrate-companies migration...');
|
||
try {
|
||
await migrateCompanies();
|
||
|
||
// Record successful migration
|
||
await Migration.create({
|
||
name: 'migrate-companies',
|
||
status: 'completed',
|
||
message: 'Company data migration completed successfully'
|
||
});
|
||
|
||
console.log('[Init] ✅ migrate-companies recorded in database\n');
|
||
} catch (err) {
|
||
// Record failed migration
|
||
await Migration.create({
|
||
name: 'migrate-companies',
|
||
status: 'failed',
|
||
message: err.message
|
||
});
|
||
console.error('[Init] ❌ migrate-companies failed:', err.message);
|
||
}
|
||
} else {
|
||
console.log('[Init] ℹ️ migrate-companies already executed:', migrateCompaniesRan.executedAt);
|
||
console.log('[Init] Skipping migration...\n');
|
||
}
|
||
|
||
await mongoose.connection.close();
|
||
console.log('[Init] Database initialization complete\n');
|
||
} catch (err) {
|
||
console.error('[Init] ❌ Error during database initialization:', err.message);
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
module.exports = initializeDatabase;
|
||
|
||
// Run directly if called as script
|
||
if (require.main === module) {
|
||
initializeDatabase().catch(err => {
|
||
console.error('Initialization failed:', err);
|
||
process.exit(1);
|
||
});
|
||
}
|