File size: 2,347 Bytes
ece5841
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 };