import mongoose from "mongoose"
const userSchema = new mongoose.Schema(
{
email: {
type: String,
required: true,
unique: true
},
username: {
type: String,
required: [true, "Username is required"],
unique: true,
trim: true,
minlength: [3, "Username must be at least 3 characters long"],
maxlength: [20, "Username cannot be more than 20 characters long"]
},
password: {
type: String,
minlength: 6,
},
profilePic: {
type: String,
default: "",
},
friends: [{
type: mongoose.Schema.Types.ObjectId,
ref: "User",
default: []
}],
friendRequests: [{ // Incoming friend requests
type: mongoose.Schema.Types.ObjectId,
ref: "User",
default: []
}],
sentRequests: [{ // Outgoing friend requests
type: mongoose.Schema.Types.ObjectId,
ref: "User",
default: []
}],
authProvider: {
type: String,
enum: ['email', 'google'],
default: 'email'
},
googleId: {
type: String,
unique: true,
sparse: true
},
},
{
timestamps: true
}
);
userSchema.pre('save', async function(next) {
if (this.authProvider === 'google' && !this.isModified('password')) {
this.password = undefined;
}
if (this.authProvider === 'email' && !this.password && this.isNew) {
return next(new Error('Password is required for email signup.'));
}
next();
});
const User = mongoose.model("User", userSchema);
export default User;