Files
cms.uldp.edu.vn/models/aboutUs.js
2026-04-10 15:55:15 +07:00

109 lines
4.6 KiB
JavaScript

const mongoose = require("mongoose");
const aboutUsSchema = new mongoose.Schema(
{
hero: {
title: { type: String, trim: true, maxlength: 80 },
breadcrumb: [{ type: String, trim: true, maxlength: 80 }],
backgroundImage: { type: String, trim: true, maxlength: 255 },
},
intro: {
subheading: { type: String, trim: true, maxlength: 80 },
heading: { type: String, trim: true, maxlength: 120 },
description: { type: String, trim: true, maxlength: 1000 },
image: { type: String, trim: true, maxlength: 255 },
},
mission: {
subheading: { type: String, trim: true, maxlength: 80 },
heading: { type: String, trim: true, maxlength: 120 },
description: { type: String, trim: true, maxlength: 1000 },
images: {
main: { type: String, trim: true, maxlength: 255 },
secondary: { type: String, trim: true, maxlength: 255 },
bgShape: { type: String, trim: true, maxlength: 255 },
planeShape: { type: String, trim: true, maxlength: 255 },
topShape: { type: String, trim: true, maxlength: 255 },
globeShape: { type: String, trim: true, maxlength: 255 },
},
items: [
new mongoose.Schema(
{
icon: { type: String, trim: true, maxlength: 255 },
label: { type: String, trim: true, maxlength: 80 },
description: { type: String, trim: true, maxlength: 240 },
},
{ _id: false },
),
],
features: [{ type: String, trim: true, maxlength: 80 }],
ctaButton: {
label: { type: String, trim: true, maxlength: 64 },
href: { type: String, trim: true, maxlength: 255 },
},
},
features: {
backgroundImage: { type: String, trim: true, maxlength: 255 },
subheading: { type: String, trim: true, maxlength: 80 },
heading: { type: String, trim: true, maxlength: 120 },
description: { type: String, trim: true, maxlength: 1000 },
image: { type: String, trim: true, maxlength: 255 },
items: [
new mongoose.Schema(
{
icon: { type: String, trim: true, maxlength: 255 },
title: { type: String, trim: true, maxlength: 80 },
description: { type: String, trim: true, maxlength: 240 },
},
{ _id: false },
),
],
ctaButton: {
label: { type: String, trim: true, maxlength: 64 },
href: { type: String, trim: true, maxlength: 255 },
},
},
news: {
subheading: { type: String, trim: true, maxlength: 80 },
heading: { type: String, trim: true, maxlength: 120 },
ctaButton: {
label: { type: String, trim: true, maxlength: 64 },
href: { type: String, trim: true, maxlength: 255 },
},
selectedBlogIds: [{ type: mongoose.Schema.Types.ObjectId, ref: "Blog" }],
// Deprecated: items field kept for backward compatibility during migration
items: [
new mongoose.Schema(
{
title: { type: String, trim: true, maxlength: 120 },
category: { type: String, trim: true, maxlength: 48 },
date: { type: String, trim: true, maxlength: 32 },
comments: Number,
author: {
name: { type: String, trim: true, maxlength: 48 },
avatar: { type: String, trim: true, maxlength: 255 },
},
link: { type: String, trim: true, maxlength: 255 },
thumbnail: { type: String, trim: true, maxlength: 255 },
},
{ _id: false },
),
],
},
},
{
timestamps: true,
collection: "aboutus",
},
);
// Static method để đảm bảo luôn chỉ có 1 bản ghi duy nhất (Singleton)
aboutUsSchema.statics.getSingle = async function () {
let doc = await this.findOne();
if (!doc) {
doc = await this.create({});
}
return doc;
};
module.exports = mongoose.model("AboutUs", aboutUsSchema);