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 :
user.models.js
back
Copy
import mongoose, { Schema } from 'mongoose'; const userSchema = new mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, first_name: { type:String, required: true }, last_name: { type:String, required: true }, gender: { type:String, required: true }, email: { type: String, required: true, unique: true }, password: { type:String, required: true }, number: { type:String, required: true }, Nationality: { type:String, required: true }, department: { type:mongoose.Schema.Types.ObjectId, required: false, ref: 'department' }, role: { type:String, required: true, enum : ['super_admin', 'admin', 'department_head', 'employee'] }, workinghours: { type:String, required: true }, break_duration: { type: Number, required: true, validate: { validator: Number.isInteger, message: '{VALUE} is not an integer value' } }, start_time: { type: String, required: true, validate: { validator: function(v) { return /^\d{1,2}:\d{2}\s(AM|PM)$/i.test(v); }, message: 'Start time must be in format "H:MM AM/PM" or "HH:MM AM/PM"' } }, end_time: { type: String, required: true, validate: { validator: function(v) { return /^\d{1,2}:\d{2}\s(AM|PM)$/i.test(v); }, message: 'End time must be in format "H:MM AM/PM" or "HH:MM AM/PM"' } }, day_off: { type: [String], required: true, validate: { validator: function(v) { // Ensure all elements are valid days of the week const validDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; return v.every(day => validDays.includes(day)); }, message: 'Invalid day of the week' } }, joined_on: { type: Date, default: () => new Date('2026-01-01T00:00:00.000Z'), }, // Salary (nullable; used for invoices) baseSalaryAmount: { type: Number, default: null }, baseSalaryCurrency: { type: String, default: null, trim: true, maxLength: 10 }, baseSalaryUsd: { type: Number, default: null }, // Bank / account details (editable in settings) bankAccountName: { type: String, default: null, trim: true, maxLength: 200 }, bankName: { type: String, default: null, trim: true, maxLength: 200 }, bankAccountNumber: { type: String, default: null, trim: true, maxLength: 100 }, bankSwiftCode: { type: String, default: null, trim: true, maxLength: 20 }, bankRoutingNumber: { type: String, default: null, trim: true, maxLength: 50 }, bankAccountType: { type: String, default: null, trim: true, maxLength: 50 }, bankAddress: { type: String, default: null, trim: true, maxLength: 500 }, fcmToken: { type: String, default: null }, profilePicture: { type: String, required: false }, isActive: { type: Boolean, default: true, required: false } }, { timestamps: true }); export const user = mongoose.model("user",userSchema)