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