forked from UKSOURCE/cms.hailearning.edu.vn
214 lines
4.7 KiB
JavaScript
214 lines
4.7 KiB
JavaScript
const mongoose = require("mongoose");
|
|
|
|
// Schema cho menu links
|
|
const menuLinkSchema = new mongoose.Schema(
|
|
{
|
|
label: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
href: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
order: {
|
|
type: Number,
|
|
required: false,
|
|
default: 0,
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Schema cho social links
|
|
const socialLinkSchema = new mongoose.Schema(
|
|
{
|
|
icon: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
href: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Schema cho phone
|
|
const phoneSchema = new mongoose.Schema(
|
|
{
|
|
display: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
href: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Schema cho logo
|
|
const logoSchema = new mongoose.Schema(
|
|
{
|
|
src: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
alt: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
href: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "/",
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Schema cho copyright
|
|
const copyrightSchema = new mongoose.Schema(
|
|
{
|
|
text: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "Copyright©",
|
|
},
|
|
brand: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
rights: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "All Rights Reserved.",
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Schema cho top section
|
|
const topSchema = new mongoose.Schema(
|
|
{
|
|
bgImage: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
phone: {
|
|
type: phoneSchema,
|
|
default: () => ({ display: "", href: "" }),
|
|
},
|
|
address: {
|
|
type: String,
|
|
required: false,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
logo: {
|
|
type: logoSchema,
|
|
default: () => ({ src: "", alt: "", href: "/" }),
|
|
},
|
|
menuLinks: {
|
|
type: [menuLinkSchema],
|
|
default: [],
|
|
},
|
|
socialLinks: {
|
|
type: [socialLinkSchema],
|
|
default: [],
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Schema cho bottom section
|
|
const bottomSchema = new mongoose.Schema(
|
|
{
|
|
copyright: {
|
|
type: copyrightSchema,
|
|
default: () => ({ text: "Copyright©", brand: "", rights: "All Rights Reserved." }),
|
|
},
|
|
menuLinks: {
|
|
type: [menuLinkSchema],
|
|
default: [],
|
|
},
|
|
},
|
|
{ _id: false },
|
|
);
|
|
|
|
// Main Footer Schema - khớp 100% với footer.json
|
|
const footerSchema = new mongoose.Schema(
|
|
{
|
|
top: {
|
|
type: topSchema,
|
|
default: () => ({
|
|
bgImage: "",
|
|
phone: { display: "", href: "" },
|
|
address: "",
|
|
logo: { src: "", alt: "", href: "/" },
|
|
menuLinks: [],
|
|
socialLinks: [],
|
|
}),
|
|
},
|
|
bottom: {
|
|
type: bottomSchema,
|
|
default: () => ({
|
|
copyright: { text: "Copyright©", brand: "", rights: "All Rights Reserved." },
|
|
menuLinks: [],
|
|
}),
|
|
},
|
|
},
|
|
{
|
|
timestamps: true,
|
|
},
|
|
);
|
|
|
|
// Static method để lấy hoặc tạo footer duy nhất
|
|
footerSchema.statics.getSingle = async function () {
|
|
let footer = await this.findOne();
|
|
if (!footer) {
|
|
footer = await this.create({});
|
|
}
|
|
return footer;
|
|
};
|
|
|
|
// Migration method để import từ JSON hiện tại
|
|
footerSchema.statics.migrateFromJson = async function (jsonData) {
|
|
try {
|
|
// Xóa tất cả documents hiện có
|
|
await this.deleteMany({});
|
|
|
|
// Tạo document mới
|
|
const footer = await this.create(jsonData);
|
|
console.log("Footer data migrated successfully");
|
|
return footer;
|
|
} catch (error) {
|
|
console.error("Error migrating footer data:", error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
module.exports = mongoose.model("Footer", footerSchema);
|