Files
2026-09-16 17:36:46 +05:30

48 lines
1.8 KiB
JavaScript

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const addressSchema = new mongoose.Schema({
fullName: { type: String, default: '' },
mobileNumber: { type: String, default: '' },
addressLine1: { type: String, default: '' },
addressLine2: { type: String, default: '' },
landmark: { type: String, default: '' },
street: { type: String, default: '' },
city: { type: String, required: true },
district: { type: String, default: '' },
state: { type: String, required: true },
postalCode: { type: String, required: true },
country: { type: String, required: true, default: 'India' },
isDefault: { type: Boolean, default: false }
});
const userSchema = new mongoose.Schema({
name: { type: String, required: [true, 'Please provide your name'], trim: true },
email: { type: String, required: [true, 'Please provide your email'], unique: true, lowercase: true, trim: true },
password: { type: String, required: [true, 'Please provide a password'], minlength: 6, select: false },
role: {
type: String,
enum: ['Customer', 'Admin', 'Staff', 'Warehouse Manager', 'Order Manager'],
default: 'Customer'
},
phone: { type: String, default: '' },
avatar: { type: String, default: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=300' },
addresses: [addressSchema],
isVerified: { type: Boolean, default: true },
resetPasswordToken: String,
resetPasswordExpire: Date
}, { timestamps: true });
userSchema.pre('save', async function(next) {
if (!this.isModified('password')) return next();
const salt = await bcrypt.genSalt(10);
this.password = await bcrypt.hash(this.password, salt);
next();
});
userSchema.methods.matchPassword = async function(enteredPassword) {
return await bcrypt.compare(enteredPassword, this.password);
};
module.exports = mongoose.model('User', userSchema);