const mongoose = require("mongoose"); const bcrypt = require("bcryptjs"); const userSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true, trim: true, }, email: { type: String, required: true, unique: true, trim: true, lowercase: true, }, password: { type: String, required: true, }, name: { type: String, required: true, }, role: { type: String, enum: ["admin", "manager", "editor"], default: "admin", }, resetPasswordToken: String, resetPasswordExpires: Date, createdAt: { type: Date, default: Date.now, }, }); // 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 (err) { next(err); } }); // Method to compare password userSchema.methods.comparePassword = async function (candidatePassword) { return await bcrypt.compare(candidatePassword, this.password); }; module.exports = mongoose.model("User", userSchema);