require('dotenv').config(); const fs = require('fs').promises; const path = require('path'); const connectDB = require('../config/database'); const Insurance = require('../models/insurance'); const mongoose = require('mongoose'); /** * Migration: insurance * Created: 11:13:38 10/12/2025 * Updated: 14/12/2025 - Simplified for new structure only */ async function migrate() { try { console.log('Starting migration: insurance...'); await connectDB(); // Đọc file insurance.json const insuranceJsonPath = path.join(__dirname, '../data/insurance.json'); console.log('Reading JSON file from:', insuranceJsonPath); const insuranceData = JSON.parse(await fs.readFile(insuranceJsonPath, 'utf8')); console.log('Insurance data loaded successfully'); // Sử dụng phương thức migrateFromJson của model await Insurance.migrateFromJson(insuranceData); console.log('Insurance migration completed successfully!'); await mongoose.disconnect(); process.exit(0); } catch (error) { console.error('Migration error:', error); process.exit(1); } } /** * Custom migration logic cho insurance data */ async function migrateInsuranceData(insuranceData) { try { console.log('Starting custom migration logic...'); // Xóa dữ liệu cũ nếu có const existingInsurance = await Insurance.find({}); if (existingInsurance.length > 0) { console.log(`Found ${existingInsurance.length} existing insurance documents`); await Insurance.deleteMany({}); console.log('Cleared existing insurance data'); } // Tạo document mới const insuranceDocument = new Insurance({ name: 'default', version: '2.0.0', language: 'en', hero: insuranceData.hero, page: insuranceData.page, content: insuranceData.content, createdAt: new Date(), updatedAt: new Date(), isActive: true }); // Lưu vào database await insuranceDocument.save(); console.log('Insurance document saved successfully'); } catch (error) { console.error('Error in migrateInsuranceData:', error); throw error; } } // Chạy migration nếu được gọi trực tiếp if (require.main === module) { migrate(); } module.exports = { migrate, migrateInsuranceData };