forked from UKSOURCE/cms.hailearning.edu.vn
refactor(about): remove blog section and decouple from blog module
This commit is contained in:
99
scripts/2026_02_07_migrate_about_news_to_blog.js
Normal file
99
scripts/2026_02_07_migrate_about_news_to_blog.js
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* 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 };
|
||||
Reference in New Issue
Block a user