Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
mudeerapi.abasa.com
/
nodetest-backup30April26
/
src
/
models
/
Filename :
leaveRequest.model.js
back
Copy
import mongoose from 'mongoose'; const leaveRequestSchema = new mongoose.Schema( { _id: { type: mongoose.Schema.Types.ObjectId, default: () => new mongoose.Types.ObjectId(), }, employee: { type: mongoose.Schema.Types.ObjectId, ref: 'user', required: true, index: true, }, submittedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'user', required: true, index: true, }, approver: { type: mongoose.Schema.Types.ObjectId, ref: 'user', default: null, index: true, }, leaveType: { type: String, required: true, enum: ['Paid Leave', 'Unpaid Leave', 'Public Holiday'], index: true, }, startDate: { type: Date, required: true, index: true, }, endDate: { type: Date, required: true, index: true, }, totalDays: { type: Number, required: true, min: 1, }, subject: { type: String, required: true, trim: true, maxLength: 200, }, body: { type: String, required: true, trim: true, maxLength: 5000, }, status: { type: String, required: true, enum: ['pending', 'accepted', 'rejected', 'cancelled'], default: 'pending', index: true, }, rejectionReason: { type: String, default: null, trim: true, maxLength: 1000, }, decidedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'user', default: null, index: true, }, decidedAt: { type: Date, default: null, }, isAdminSubmission: { type: Boolean, default: false, index: true, }, // How this request impacted balances once accepted deduction: { paidDays: { type: Number, default: 0, min: 0 }, unpaidDays: { type: Number, default: 0, min: 0 }, holidayDays: { type: Number, default: 0, min: 0 }, autoConverted: { type: Boolean, default: false }, }, attachmentUrl: { type: String, default: null, trim: true, maxLength: 2000, }, balanceSnapshot: { paidLeavesRemaining: { type: Number, default: null }, paidLeavesUsed: { type: Number, default: null }, unpaidLeavesUsed: { type: Number, default: null }, occasionalOffsUsed: { type: Number, default: null }, tenureIndex: { type: Number, default: null }, }, }, { timestamps: true } ); leaveRequestSchema.index({ employee: 1, createdAt: -1 }); leaveRequestSchema.index({ approver: 1, status: 1, createdAt: -1 }); leaveRequestSchema.index({ status: 1, createdAt: -1 }); export const LeaveRequest = mongoose.model('leaveRequest', leaveRequestSchema);