mkcart / backend /models /userModel.js
Kumar
updated
c2efbe6
const mongoose = require("mongoose");
const bcrypt = require('bcryptjs');
const userSchema = mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
isActive: { type: Boolean, default: true },
lastLogin: { type: Date },
createdAt: { type: Date, default: Date.now },
dateOfBirth: { type: String},
gender: { type: String },
country: { type: String },
wishlist: [
{
productId: { type: mongoose.Schema.Types.ObjectId, ref: "Product" },
name: String,
price: Number,
category: String,
seller: String,
stock: Number,
image: String,
ratings: Number,
createdAt: { type: Date, default: Date.now }
}
],
orders: [
{
createdAt: { type: Date, default: Date.now },
amount: Number,
subtotal: Number,
shipping: Number,
tax: Number,
discount: Number,
status: String,
estimatedDelivery: Date,
shippingAddress: {
fullName: String,
email: String,
phone: String,
address: String,
city: String,
state: String,
zipCode: String,
country: String
},
paymentMethod: String,
preferences: {
giftWrapping: Boolean,
expressDelivery: Boolean,
specialInstructions: String
},
orderItems: [
{
productId: { type: mongoose.Schema.Types.ObjectId, ref: "Product" },
name: String,
price: Number,
qty: Number,
category: String,
seller: String,
stock: Number,
image: String,
ratings: Number
}
],
}
],
reviews: [
{
product: { type: mongoose.Schema.Types.ObjectId, ref: "Product" },
rating: { type: Number },
comment: { type: String },
createdAt: { type: Date, default: Date.now }
}
],
carts: [
{
createdAt: { type: Date, default: Date.now },
amount: Number,
status: String,
cartItems: [
{
productId: { type: mongoose.Schema.Types.ObjectId, ref: "Product" },
name: String,
price: Number,
qty: Number,
category: String,
seller: String,
stock: Number,
image: String,
ratings: Number
}
],
}
],
});
userSchema.pre('save', async function(next) {
if (!this.isModified('password')) {
next();
}
const salt = await bcrypt.genSalt(10);
this.password = await bcrypt.hash(this.password, salt);
});
userSchema.methods.checkPassword = async function(givenPassword) {
return await bcrypt.compare(givenPassword, this.password);
};
const User = mongoose.model("User", userSchema);
module.exports = User;