Files
uldp-degree-mangement-system/models/footer.js
r2xrzh9q2z-lab d1b931d547 first commit
2026-02-02 11:07:09 +07:00

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);