миграция

This commit is contained in:
2025-10-27 19:37:21 +03:00
parent 6c190b80fb
commit eca5cba858
9 changed files with 477 additions and 109 deletions

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