File size: 2,573 Bytes
f37be3f
 
 
 
a6fbb8d
 
 
98d83e7
a6fbb8d
 
98d83e7
 
a6fbb8d
 
 
98d83e7
 
a6fbb8d
 
 
98d83e7
 
a6fbb8d
 
 
98d83e7
 
a6fbb8d
 
 
 
 
 
 
98d83e7
 
a6fbb8d
 
 
 
 
98d83e7
 
a6fbb8d
 
 
 
 
98d83e7
f37be3f
 
 
 
 
a6fbb8d
98d83e7
 
 
 
 
f37be3f
 
98d83e7
 
 
 
 
 
 
 
 
 
 
f37be3f
 
98d83e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f37be3f
98d83e7
 
 
 
 
a6fbb8d
 
 
 
 
 
f37be3f
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import mongoose from "mongoose";
import bcrypt from "bcrypt";
export const saltrounds = 5;
const { Schema } = mongoose;
enum Role {
    USER = "user"
}
enum Gender {
    MALE = "male",
    FEMALE = "female"
}
enum FitnessLevel {
    BEGINNER = "beginner",
    INTERMEDIATE = "intermediate",
    ADVANCED = "advanced"
}
enum FitnessGoal {
    LOSE_WEIGHT = "lose weight",
    GAIN_MUSCLE = "gain muscle",
    GET_FITTER = "get fitter"
}
enum WorkoutPlace {
    GYM = "gym",
    HOME = "home",
    BOTH = "both"
}
enum PreferredDay {
    SATURDAY = "saturday",
    SUNDAY = "sunday",
    MONDAY = "monday",
    TUESDAY = "tuesday",
    WEDNESDAY = "wednesday",
    THURSDAY = "thursday",
    FRIDAY = "friday"
}
enum PreferredEquipment {
    BARBELLS = "barbells",
    DUMBBELLS = "dumbbells",
    GYM_MACHINES = "gym machines",
    RESISTANCE_BAND = "resistance band",
    BODYWEIGHT = "bodyweight"
}
enum Injurie {
    NECK = "neck",
    SHOULDERS = "shoulders",
    BACK = "back",
    ARMS = "arms",
    KNEES = "knees"
}

const userSchema = new Schema({
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true, dropDups: true },
    password: { type: String, required: true },
    image: { type: Object },
    gender: {
        type: String,
        enum: Gender,
        required: true
    },
    height: { type: Number, required: true },
    weight: { type: Number, required: true },
    fitness_level: {
        type: String,
        enum: FitnessLevel,
        required: true
    },
    preferences: {
        fitness_goal: {
            type: String,
            enum: FitnessGoal,
            required: true
        },
        target_weight: { type: Number, required: true },
        workout_frequency: { type: Number, required: true },
        preferred_days: [{
            type: String,
            enum: PreferredDay,
            required: true
        }],
        workout_place: {
            type: String,
            enum: WorkoutPlace,
            required: true
        },
        preferred_equipment: [{
            type: String,
            enum: PreferredEquipment,
            required: true
        }]
    },
    injuries: [{
        type: String,
        enum: Injurie,
        required: true
    }],
    dob: { type: Date },
    role: {
        type: String,
        enum: Role,
        required: true
    }
});

userSchema.pre("save", async function (next) {
    this.password = await bcrypt.hash(this.password, saltrounds);
    next();
});

export const userModel = mongoose.model("users", userSchema);