forked from UKSOURCE/cms.hailearning.edu.vn
107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
const mongoose = require("mongoose");
|
|
|
|
// Clear cache
|
|
if (mongoose.models.Booking) {
|
|
delete mongoose.models.Booking;
|
|
}
|
|
if (mongoose.connection.models.Booking) {
|
|
delete mongoose.connection.models.Booking;
|
|
}
|
|
|
|
const bookingSchema = new mongoose.Schema(
|
|
{
|
|
hero: {
|
|
title: { type: String, trim: true, maxlength: 80 },
|
|
backgroundImage: { type: String, trim: true, maxlength: 255 },
|
|
},
|
|
|
|
searchBar: {
|
|
locationLabel: { type: String, trim: true, maxlength: 64 },
|
|
holidaySeasonLabel: { type: String, trim: true, maxlength: 64 },
|
|
searchButtonText: { type: String, trim: true, maxlength: 64 },
|
|
},
|
|
|
|
filterPanel: {
|
|
title: { type: String, trim: true, maxlength: 80 },
|
|
priceTitle: { type: String, trim: true, maxlength: 64 },
|
|
priceLabel: { type: String, trim: true, maxlength: 64 },
|
|
pricePlaceholder: { type: String, trim: true, maxlength: 64 },
|
|
priceMin: Number,
|
|
priceMax: Number,
|
|
activitiesTitle: { type: String, trim: true, maxlength: 64 },
|
|
ageTitle: { type: String, trim: true, maxlength: 64 },
|
|
ageSelectPlaceholder: { type: String, trim: true, maxlength: 64 },
|
|
ageMin: Number,
|
|
ageMax: Number,
|
|
ratingTitle: { type: String, trim: true, maxlength: 64 },
|
|
ratingOptions: [
|
|
{
|
|
value: { type: String, trim: true, maxlength: 48 },
|
|
label: { type: String, trim: true, maxlength: 64 },
|
|
},
|
|
],
|
|
resetButtonText: { type: String, trim: true, maxlength: 64 },
|
|
},
|
|
|
|
programs: [
|
|
{
|
|
value: { type: String, trim: true, maxlength: 64 },
|
|
label: { type: String, trim: true, maxlength: 64 },
|
|
},
|
|
],
|
|
|
|
holidays: [
|
|
{
|
|
value: { type: String, trim: true, maxlength: 64 },
|
|
label: { type: String, trim: true, maxlength: 64 },
|
|
},
|
|
],
|
|
|
|
locations: [
|
|
{
|
|
value: { type: String, trim: true, maxlength: 64 },
|
|
label: { type: String, trim: true, maxlength: 64 },
|
|
},
|
|
],
|
|
|
|
camps: [
|
|
{
|
|
name: { type: String, trim: true, maxlength: 120 },
|
|
price: Number,
|
|
priceText: { type: String, trim: true, maxlength: 32 },
|
|
season: [String],
|
|
age: [Number],
|
|
locations: [String],
|
|
image: { type: String, trim: true, maxlength: 255 },
|
|
link: { type: String, trim: true, maxlength: 255 },
|
|
program: { type: String, trim: true, maxlength: 80 },
|
|
rating: Number,
|
|
},
|
|
],
|
|
|
|
// Configuration - Dùng Mixed type để chấp nhận bất kỳ structure nào
|
|
configuration: mongoose.Schema.Types.Mixed,
|
|
|
|
formSteps: [
|
|
{
|
|
step: Number,
|
|
title: String,
|
|
sections: [
|
|
{
|
|
id: String,
|
|
fields: [mongoose.Schema.Types.Mixed],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
|
|
validation: mongoose.Schema.Types.Mixed,
|
|
},
|
|
{
|
|
timestamps: true,
|
|
strict: false
|
|
}
|
|
);
|
|
|
|
module.exports = mongoose.model("Booking", bookingSchema);
|