const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema( { name: { type: String, required: true, }, email: { type: String, required: true, unique: true, }, password: { type: String, required: true, }, isPremium: { type: Boolean, default: false, }, points: { type: Number, default: 0, min: 0, }, adoptedStreets: [ { type: mongoose.Schema.Types.ObjectId, ref: "Street", }, ], completedTasks: [ { type: mongoose.Schema.Types.ObjectId, ref: "Task", }, ], posts: [ { type: mongoose.Schema.Types.ObjectId, ref: "Post", }, ], events: [ { type: mongoose.Schema.Types.ObjectId, ref: "Event", }, ], profilePicture: { type: String, }, cloudinaryPublicId: { type: String, }, }, { timestamps: true, }, ); // Indexes for performance UserSchema.index({ email: 1 }); UserSchema.index({ points: -1 }); // For leaderboards // Virtual for earned badges (populated from UserBadge collection) UserSchema.virtual("earnedBadges", { ref: "UserBadge", localField: "_id", foreignField: "user", }); // Ensure virtuals are included when converting to JSON UserSchema.set("toJSON", { virtuals: true }); UserSchema.set("toObject", { virtuals: true }); module.exports = mongoose.model("User", UserSchema);