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