Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { Schema, model } from 'mongoose';
import mongooseUniqueValidator from 'mongoose-unique-validator';
// ################################# SCHEMA OPTIONS
const opts = {
timestamps: true,
toJSON: { virtuals: true },
strict: true,
strictQuery: false // Turn off strict mode for query filters
};
// ################################# SCHEMA
const ChatSchema = new Schema(
{
title: {
type: String,
title: 'Title',
required: true
},
chatHistory: {
type: Object,
title: 'Description',
},
updatedBy: {
type: Schema.Types.ObjectId,
title: 'updated by',
ref: "User"
},
createdBy: {
type: Schema.Types.ObjectId,
title: 'created by',
ref: "User"
}
},
opts
);
// ################################# VIRTUALS
// ################################# MIDDLEWARES
// middleware pre|post on validate|save|remove|updateOne|deleteOne
// pre save
ChatSchema.pre('save', async function (next) {
// remember editor
if (this.isNew) {
this.createdBy = global.currentUserId;
} else {
this.updatedBy = global.currentUserId;
}
// go on
next();
});
// ################################# STATICS
// ################################# QUERY HELPERS
// ################################# INSTANCE METHODS
/**
* Validate unique fields in the following function
* because default mongoose 'unique: true' isn't handled as validation error
*/
ChatSchema.plugin(mongooseUniqueValidator, { message: 'Record with this {PATH} already exists.' });
/**
* return all confidential fieldnames
* based on 'select: false'
*/
ChatSchema.methods.getConfidentialFields = function () {
const schema = Object.entries(Chat.schema.paths);
const confidentialFields = schema.filter(function (field) {
return field[1].selected === false;
});
return confidentialFields.map(field => field[0]);
};
export default model('Chat', ChatSchema); |