forked from UKSOURCE/cms.hailearning.edu.vn
100 lines
2.9 KiB
JavaScript
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 };
|