import mongoose from "mongoose"; const configSchema = mongoose.Schema( { webhookUrl: { type: String }, botToken: { type: String }, chatId: { type: String }, platform: { type: String, enum: ["slack", "pager_duty", "webhook"], }, routingKey: { type: String }, }, { _id: false } ); const NotificationSchema = mongoose.Schema( { userId: { type: mongoose.Schema.Types.ObjectId, ref: "User", immutable: true, required: true, }, teamId: { type: mongoose.Schema.Types.ObjectId, ref: "Team", immutable: true, required: true, }, type: { type: String, enum: ["email", "sms", "webhook", "pager_duty"], }, platform: { type: String, }, config: { type: configSchema, default: () => ({}), }, notificationName: { type: String, required: true, }, address: { type: String, }, phone: { type: String, }, alertThreshold: { type: Number, default: 5, }, cpuAlertThreshold: { type: Number, default: function () { return this.alertThreshold; }, }, memoryAlertThreshold: { type: Number, default: function () { return this.alertThreshold; }, }, diskAlertThreshold: { type: Number, default: function () { return this.alertThreshold; }, }, tempAlertThreshold: { type: Number, default: function () { return this.alertThreshold; }, }, }, { timestamps: true, } ); NotificationSchema.pre("save", function (next) { if (!this.cpuAlertThreshold || this.isModified("alertThreshold")) { this.cpuAlertThreshold = this.alertThreshold; } if (!this.memoryAlertThreshold || this.isModified("alertThreshold")) { this.memoryAlertThreshold = this.alertThreshold; } if (!this.diskAlertThreshold || this.isModified("alertThreshold")) { this.diskAlertThreshold = this.alertThreshold; } if (!this.tempAlertThreshold || this.isModified("alertThreshold")) { this.tempAlertThreshold = this.alertThreshold; } next(); }); NotificationSchema.pre("findOneAndUpdate", function (next) { const update = this.getUpdate(); if (update.alertThreshold) { update.cpuAlertThreshold = update.alertThreshold; update.memoryAlertThreshold = update.alertThreshold; update.diskAlertThreshold = update.alertThreshold; update.tempAlertThreshold = update.alertThreshold; } next(); }); export default mongoose.model("Notification", NotificationSchema);