миграция
This commit is contained in:
74
server/routers/procurement/scripts/init-database.js
Normal file
74
server/routers/procurement/scripts/init-database.js
Normal file
@@ -0,0 +1,74 @@
|
||||
const mongoose = require('mongoose');
|
||||
const { migrateCompanies } = require('./migrate-companies');
|
||||
require('dotenv').config({ path: '../../.env' });
|
||||
|
||||
const mongoUrl = process.env.MONGODB_URI || 'mongodb://localhost:27017/procurement_db';
|
||||
|
||||
// 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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user