diff --git a/.env.example b/.env.example index ad8f4a5..6e9969b 100644 Binary files a/.env.example and b/.env.example differ diff --git a/controllers/headerController.js b/controllers/headerController.js index 3376342..a237ffb 100644 --- a/controllers/headerController.js +++ b/controllers/headerController.js @@ -1,5 +1,5 @@ const Header = require("../models/header"); -const HeaderMenu = require("../models/HeaderMenu"); +const HeaderMenu = require("../models/headerMenu"); const writeAuditLog = require("../audit/writeAuditLog"); const diffObject = require("../audit/diffObject"); const AUDIT_ACTIONS = require("../constants/auditAction"); diff --git a/controllers/headerMenuController.js b/controllers/headerMenuController.js index 5423ed4..0c1ddfb 100644 --- a/controllers/headerMenuController.js +++ b/controllers/headerMenuController.js @@ -1,4 +1,4 @@ -const HeaderMenu = require("../models/HeaderMenu"); +const HeaderMenu = require("../models/headerMenu"); const slugify = require("slugify"); /** diff --git a/package.json b/package.json index 67a480f..a620fad 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "migrate-fresh": "node scripts/migrate-fresh.js", "migrate-status": "node scripts/migrate-status.js", "migrate-rollback": "node scripts/migrate-rollback.js", - "make-migration": "node scripts/make-migration.js" + "make-migration": "node scripts/make-migration.js", + "db:seed": "node scripts/seedDatabase.js" }, "keywords": [ "cms", diff --git a/scripts/migrate-header-menu.js b/scripts/migrate-header-menu.js index 3f7cbba..cc5b2e2 100644 --- a/scripts/migrate-header-menu.js +++ b/scripts/migrate-header-menu.js @@ -2,7 +2,7 @@ const mongoose = require('mongoose'); const fs = require('fs'); const path = require('path'); const dotenv = require('dotenv'); -const HeaderMenu = require('../models/HeaderMenu'); +const HeaderMenu = require('../models/headerMenu'); dotenv.config(); diff --git a/scripts/seedDatabase.txt b/scripts/seedDatabase.txt new file mode 100644 index 0000000..c407b41 --- /dev/null +++ b/scripts/seedDatabase.txt @@ -0,0 +1,92 @@ +require("dotenv").config(); +const mongoose = require("mongoose"); +const fs = require("fs"); +const path = require("path"); + +// Import models +const About = require("../models/aboutUs"); +const Blog = require("../models/blog"); +const Service = require("../models/service"); +const Contact = require("../models/contact"); +const Footer = require("../models/footer"); +const Header = require("../models/header"); +const HeaderMenu = require("../models/headerMenu"); +const Home = require("../models/home"); +const FAQ = require("../models/faq"); +const Visa = require("../models/visa"); +const Appointment = require("../models/appointment"); +const Pricing = require("../models/pricing"); +const Activity = require("../models/activity"); + +// Data mapping +const dataMap = { + about: { model: About, file: "about.json" }, + blog: { model: Blog, file: "blog.json" }, + service: { model: Service, file: "service.json" }, + contact: { model: Contact, file: "contact.json" }, + footer: { model: Footer, file: "footer.json" }, + header: { model: Header, file: "header.json" }, + headerMenu: { model: HeaderMenu, file: "header-menu.json" }, + home: { model: Home, file: "home.json" }, + faq: { model: FAQ, file: "faq-data.json" }, + visa: { model: Visa, file: "visa.json" }, + appointment: { model: Appointment, file: "appointment.json" }, + pricing: { model: Pricing, file: "pricing.json" }, +}; + +const seedDatabase = async () => { + try { + // Kết nối MongoDB + if (!process.env.MONGODB_URI) { + throw new Error("MONGODB_URI is not defined in environment variables"); + } + + console.log("🔗 Connecting to MongoDB..."); + await mongoose.connect(process.env.MONGODB_URI); + console.log("✅ MongoDB Connected"); + + // Seed từng collection + for (const [key, config] of Object.entries(dataMap)) { + try { + const jsonPath = path.join(__dirname, "../data", config.file); + + if (!fs.existsSync(jsonPath)) { + console.warn(`⚠️ ${config.file} không tồn tại, bỏ qua...`); + continue; + } + + const rawData = fs.readFileSync(jsonPath, "utf8"); + const jsonData = JSON.parse(rawData); + + if (Array.isArray(jsonData)) { + // Nếu là array, xóa tất cả và thêm mới + await config.model.deleteMany({}); + await config.model.insertMany(jsonData); + console.log(`✅ Seeded ${key} (${jsonData.length} items)`); + } else { + // Nếu là object, dùng upsert + await config.model.findOneAndUpdate({}, jsonData, { + upsert: true, + new: true, + setDefaultsOnInsert: true + }); + console.log(`✅ Seeded ${key}`); + } + } catch (error) { + console.error(`❌ Error seeding ${key}:`, error.message); + } + } + + console.log("🎉 Database seeding completed successfully!"); + + } catch (error) { + console.error("❌ Seeding failed:", error.message); + process.exit(1); + } finally { + await mongoose.connection.close(); + console.log("👋 Database connection closed"); + process.exit(0); + } +}; + +seedDatabase(); diff --git a/views/admin/aboutUs/index.ejs b/views/admin/aboutUs/index.ejs index 556b9cd..69d6932 100644 --- a/views/admin/aboutUs/index.ejs +++ b/views/admin/aboutUs/index.ejs @@ -41,14 +41,9 @@ aria-selected="false">Intro -