All files / ragchat-api/models Chat.js

82.5% Statements 66/80
100% Branches 0/0
0% Functions 0/1
82.5% Lines 66/80

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