forked from UKSOURCE/cms.hailearning.edu.vn
235 lines
4.2 KiB
JavaScript
235 lines
4.2 KiB
JavaScript
const mongoose = require("mongoose");
|
|
|
|
// Schema cho social links
|
|
const socialLinkSchema = new mongoose.Schema(
|
|
{
|
|
platform: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
url: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
icon: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho footer links
|
|
const footerLinkSchema = new mongoose.Schema(
|
|
{
|
|
title: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
url: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho footer columns
|
|
const footerColumnSchema = new mongoose.Schema(
|
|
{
|
|
title: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
links: {
|
|
type: [footerLinkSchema],
|
|
default: [],
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho logo
|
|
const logoSchema = new mongoose.Schema(
|
|
{
|
|
src: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
alt: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho address
|
|
const addressSchema = new mongoose.Schema(
|
|
{
|
|
text: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
// Thêm address2 (địa chỉ dòng 2) không bắt buộc
|
|
address2: {
|
|
type: String,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
// Optional secondary link (e.g., a second map or external resource)
|
|
link2: {
|
|
type: String,
|
|
trim: true,
|
|
default: "",
|
|
},
|
|
mapUrl: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho contact info
|
|
const contactInfoSchema = new mongoose.Schema(
|
|
{
|
|
phone: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
hours: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
email: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho copyright
|
|
const copyrightSchema = new mongoose.Schema(
|
|
{
|
|
text: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Schema cho about section (column đầu tiên)
|
|
const aboutSchema = new mongoose.Schema(
|
|
{
|
|
title: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
description: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
mapLink: {
|
|
text: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
url: {
|
|
type: String,
|
|
required: true,
|
|
trim: true,
|
|
},
|
|
},
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
// Main Footer Schema
|
|
const footerSchema = new mongoose.Schema(
|
|
{
|
|
name: {
|
|
type: String,
|
|
default: "default",
|
|
unique: true,
|
|
},
|
|
about: {
|
|
type: aboutSchema,
|
|
required: true,
|
|
},
|
|
address: {
|
|
type: addressSchema,
|
|
required: true,
|
|
},
|
|
contact: {
|
|
type: contactInfoSchema,
|
|
required: true,
|
|
},
|
|
columns: {
|
|
type: [footerColumnSchema],
|
|
default: [],
|
|
},
|
|
social: {
|
|
links: {
|
|
type: [socialLinkSchema],
|
|
default: [],
|
|
},
|
|
},
|
|
copyright: {
|
|
type: copyrightSchema,
|
|
required: true,
|
|
},
|
|
},
|
|
{
|
|
timestamps: true,
|
|
}
|
|
);
|
|
|
|
// Tạo migration script để import dữ liệu từ footer.json
|
|
footerSchema.statics.migrateFromJson = async function (jsonData) {
|
|
try {
|
|
// Kiểm tra xem đã có footer mặc định chưa
|
|
const existingFooter = await this.findOne({ name: "default" });
|
|
|
|
if (existingFooter) {
|
|
// Cập nhật footer hiện có
|
|
Object.assign(existingFooter, jsonData);
|
|
await existingFooter.save();
|
|
console.log("Footer data updated successfully");
|
|
return existingFooter;
|
|
} else {
|
|
// Tạo footer mới với dữ liệu từ JSON
|
|
const newFooter = await this.create({
|
|
name: "default",
|
|
...jsonData,
|
|
});
|
|
console.log("Footer data imported successfully");
|
|
return newFooter;
|
|
}
|
|
} catch (error) {
|
|
console.error("Error migrating footer data:", error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
module.exports = mongoose.model("Footer", footerSchema);
|