78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
const mongoose = require('mongoose');
|
|
|
|
function autoPopulateSubs(next) {
|
|
this.populate({
|
|
path: 'childs',
|
|
select: 'title childs navIndex url modelType treeCat parent defaultPageType',
|
|
options:{
|
|
sort : 'navIndex'
|
|
}
|
|
// sort: {navIndex: -1},
|
|
});
|
|
next();
|
|
}
|
|
|
|
function file(file) {
|
|
return '/uploads/files/terms/' + file
|
|
}
|
|
|
|
function image(img) {
|
|
if (img) return '/uploads/images/category/' + img
|
|
else return '/img/no-cover.jpg'
|
|
}
|
|
|
|
const CategoryTermsFile = mongoose.Schema({
|
|
file: {type: String, get: file},
|
|
title: String
|
|
})
|
|
|
|
|
|
const CategorySchema = mongoose.Schema({
|
|
title: String,
|
|
parent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null},
|
|
childs: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}],
|
|
treeCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}],
|
|
rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'},
|
|
priority: {type: Number, default: 0},
|
|
showInMenu: Boolean,
|
|
navIndex: {type: Number, default: null},
|
|
news: {type: Boolean, default: true},
|
|
child: {type: Boolean, default: true},
|
|
special: {type: Boolean, default: false},
|
|
allowComment: {type: Boolean, default: false},
|
|
level: {type: Number, default: 1},
|
|
siteMap: {type: Boolean, default: true},
|
|
modelType: String,
|
|
_creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
|
|
_updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
|
|
haveNews: {type: Boolean, default: false},
|
|
///// for client
|
|
hasNewsTab: {type: Boolean, default: true},
|
|
hasContentTab: {type: Boolean, default: true},
|
|
hasMediaTab: {type: Boolean, default: true},
|
|
hasSubMenusTab: {type: Boolean, default: true},
|
|
hasTermsTab: {type: Boolean, default: true},
|
|
hasNotificationsTab: {type: Boolean, default: true},
|
|
hasSpecNewsTab: {type: Boolean, default: true},
|
|
hasNazarTab: {type: Boolean, default: true},
|
|
hasNewsFileTab: {type: Boolean, default: true},
|
|
defaultPageType: {type: String, default: 'news'},
|
|
/** page */
|
|
showInFooter: {type: Number, enum: [0, 1, 2, 3], default: 0},
|
|
url: {type: String, default: null},
|
|
pageContent: String,
|
|
terms: [CategoryTermsFile],
|
|
hasManagerInfo: {type: Boolean, default: true},
|
|
managerCover: {type: String, get: image},
|
|
managerName: String,
|
|
managerDescription: String
|
|
});
|
|
|
|
CategorySchema.index({parent: 1, childs: 1});
|
|
|
|
CategorySchema
|
|
.pre('findOne', autoPopulateSubs)
|
|
.pre('find', autoPopulateSubs);
|
|
|
|
module.exports = mongoose.model('Category', CategorySchema);
|