Files
cms.uldp.edu.vn/scripts/2026_02_07_migrate_about_news_to_blog.js

100 lines
2.9 KiB
JavaScript

/**
* Migration: Convert About News static items to dynamic Blog selection
* Date: 2026-02-07
*
* This migration:
* 1. Adds selectedBlogIds field to About news section
* 2. Keeps existing items for backward compatibility
* 3. Does NOT delete old data (safe migration)
*/
const mongoose = require("mongoose");
require("dotenv").config();
const MONGODB_URI = process.env.MONGODB_URI || "mongodb://localhost:27017/SIMS";
async function up() {
try {
await mongoose.connect(MONGODB_URI);
console.log("✓ Connected to MongoDB");
const AboutUs = mongoose.model("AboutUs", new mongoose.Schema({}, { strict: false }));
const doc = await AboutUs.findOne();
if (!doc) {
console.log("⚠ No About Us document found. Skipping migration.");
return;
}
// Check if already migrated
if (doc.news && doc.news.selectedBlogIds !== undefined) {
console.log("✓ Migration already applied. Skipping.");
return;
}
// Add selectedBlogIds field (empty array by default)
if (!doc.news) {
doc.news = {};
}
doc.news.selectedBlogIds = [];
// Keep existing items for backward compatibility
// Admin can manually select blogs after migration
await doc.save();
console.log("✓ Migration completed successfully");
console.log(" - Added selectedBlogIds field to About news section");
console.log(" - Existing items preserved for backward compatibility");
console.log(" - Admin can now select blogs from Blog Management");
} catch (error) {
console.error("✗ Migration failed:", error);
throw error;
}
}
async function down() {
try {
await mongoose.connect(MONGODB_URI);
console.log("✓ Connected to MongoDB");
const AboutUs = mongoose.model("AboutUs", new mongoose.Schema({}, { strict: false }));
const doc = await AboutUs.findOne();
if (!doc || !doc.news) {
console.log("⚠ No About Us document found. Skipping rollback.");
return;
}
// Remove selectedBlogIds field
if (doc.news.selectedBlogIds !== undefined) {
delete doc.news.selectedBlogIds;
await doc.save();
console.log("✓ Rollback completed - selectedBlogIds removed");
} else {
console.log("✓ Nothing to rollback");
}
} catch (error) {
console.error("✗ Rollback failed:", error);
throw error;
}
}
// Run migration
if (require.main === module) {
up()
.then(() => {
console.log("\n✓ Migration script completed");
process.exit(0);
})
.catch((error) => {
console.error("\n✗ Migration script failed:", error);
process.exit(1);
});
}
module.exports = { up, down };