Mohamed Abu Basith
Change
898f6e2
const mongoose = require('mongoose');
const { Schema } = mongoose;
const userSchema = new Schema({
unique_id: {
type: Number,
required: true,
unique: true
},
email: {
type: String,
unique: true,
sparse: true, // Indexing only if present
// validate: {
// validator: function (value) {
// // Validate only if the email field is updated
// if (this.isModified('email') && value) {
// return !this.mobileNumber;
// }
// return true;
// },
// message: 'Mobile number must be empty if email is provided.'
// }
},
username: {
type: String,
required: true
},
dateOfBirth: {
type: String
},
mobileNumber: {
type: String,
unique: true,
sparse: true, // Indexing only if present
// validate: {
// validator: function (value) {
// // Validate only if the mobileNumber field is updated
// if (this.isModified('mobileNumber') && value) {
// return !this.email;
// }
// return true;
// },
// message: 'Email must be empty if mobile number is provided.'
// }
},
password: {
type: String,
required: true
},
pushToken: {
type: String
},
token: {
type: String
},
role: {
type: String,
enum: ['user', 'admin', 'customer'],
default: 'user'
},
googleId: {
type: String
},
profilePic: {
type: String
},
addresses: [{
name: {
type: String,
required: true
},
mobileNumber: {
type: String,
required: true
},
pinCode: {
type: String,
required: true
},
address: {
type: String,
required: true
},
area: {
type: String,
required: true
},
landMark: {
type: String
},
alterMobileNumber: {
type: String
},
_id: { // Add if you want unique IDs for addresses
type: mongoose.Schema.Types.ObjectId,
auto: true
}
}]
}, {
timestamps: true // This adds `createdAt` and `updatedAt` fields
});
// Pre-update hook to ensure validation happens only when email or mobileNumber are updated
// userSchema.pre('findOneAndUpdate', function (next) {
// const update = this.getUpdate();
// const user = this._conditions;
// // Check if email and mobileNumber are both in the update query
// if (update.email && update.mobileNumber) {
// const error = new Error('Email and mobile number cannot both be provided.');
// return next(error); // Return error if both fields are set
// }
// // Proceed with the update
// next();
// });
const User = mongoose.model('User', userSchema);
module.exports = User;