diff options
author | 2025-04-29 10:47:43 +0530 | |
---|---|---|
committer | 2025-04-29 10:47:43 +0530 | |
commit | a2e0a65b2599267efe94d665d6305f59b225bbd5 (patch) | |
tree | e2cef2031e3f7655e0c5f419020a3f1064c3b7b8 /backend/src/models/User.js | |
parent | 570bf0f3f065d583d6f94ecfc61aae93ba3e43de (diff) | |
download | restaurant-master.tar.gz restaurant-master.tar.bz2 restaurant-master.zip |
Diffstat (limited to 'backend/src/models/User.js')
-rw-r--r-- | backend/src/models/User.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/backend/src/models/User.js b/backend/src/models/User.js new file mode 100644 index 0000000..dda71d0 --- /dev/null +++ b/backend/src/models/User.js @@ -0,0 +1,70 @@ +const mongoose = require('mongoose'); +const bcrypt = require('bcryptjs'); + +const userSchema = new mongoose.Schema( + { + name: { + type: String, + required: [true, 'Name is required'], + trim: true + }, + email: { + type: String, + required: [true, 'Email is required'], + unique: true, + trim: true, + lowercase: true, + match: [/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/, 'Please enter a valid email'] + }, + password: { + type: String, + required: [true, 'Password is required'], + minlength: [6, 'Password must be at least 6 characters long'], + select: false + }, + role: { + type: String, + enum: ['customer', 'staff', 'admin'], + default: 'customer' + }, + phone: { + type: String, + trim: true + }, + address: { + type: String, + trim: true + }, + active: { + type: Boolean, + default: true + } + }, + { + timestamps: true + } +); + +// Password hashing middleware +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 await bcrypt.compare(candidatePassword, this.password); +}; + +const User = mongoose.model('User', userSchema); + +module.exports = User;
\ No newline at end of file |