const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const userSchema = new mongoose.Schema({ name: { type: String, required: true, trim: true }, email: { type: String, required: true, unique: true, lowercase: true, trim: true }, password: { type: String, required: true, minlength: 6 }, role: { type: String, enum: ['admin', 'manager', 'employee'], default: 'employee' }, avatar: { type: String, default: null }, phone: { type: String, default: null }, department: { type: String, default: null }, position: { type: String, default: null }, active: { type: Boolean, default: true }, lastLogin: { type: Date, default: null } }, { timestamps: true }); // Hash password before saving userSchema.pre('save', async function(next) { if (!this.isModified('password')) return next(); try { const salt = await bcrypt.genSalt(10); this.password = await bcrypt.hash(this.password, salt); next(); } catch (error) { next(error); } }); // Compare password method userSchema.methods.comparePassword = async function(candidatePassword) { return bcrypt.compare(candidatePassword, this.password); }; // Remove password from JSON output userSchema.methods.toJSON = function() { const userObject = this.toObject(); delete userObject.password; return userObject; }; module.exports = mongoose.model('User', userSchema);