const { Schema, default: mongoose } = require("mongoose"); | |
const { String, ObjectId } = Schema.Types; | |
const userSchema = new Schema( | |
{ | |
username: { | |
type: String, | |
unique: true, | |
required: true, | |
}, | |
email: { | |
type: String, | |
unique: true, | |
required: true, | |
}, | |
password_hash: { | |
type: String, | |
required: true, | |
}, | |
fname: String, | |
lname: String, | |
location: String, | |
country: String, | |
friends: [ | |
{ | |
type: ObjectId, | |
ref: "User", | |
}, | |
], | |
games: [ | |
{ | |
type: ObjectId, | |
ref: "Game", | |
}, | |
], | |
}, | |
{ | |
virtuals: { | |
fullName: { | |
get() { | |
return this.fname + " " + this.lname; | |
}, | |
}, | |
_friends_: { | |
async get() { | |
await this.populate("friends", "username email"); | |
// console.log(this.friends); | |
return this.friends.map((friend) => { | |
return { | |
username: friend.username, | |
email: friend.email, | |
id: friend.id, | |
}; | |
}); | |
}, | |
}, | |
_games_: { | |
async get() { | |
await this.populate("games"); | |
return this.games; | |
}, | |
}, | |
}, | |
methods: { | |
async getFriends() { | |
await this.populate("friends", "username email"); | |
// console.log(this.friends); | |
return this.friends.map((friend) => { | |
return { | |
username: friend.username, | |
email: friend.email, | |
id: friend.id, | |
}; | |
}); | |
}, | |
async getGames() { | |
await this.populate("games"); | |
return this.games; | |
}, | |
}, | |
} | |
); | |
userSchema.index({ username: "text" }); | |
const User = mongoose.model("User", userSchema); | |
module.exports = { User }; | |