File size: 2,577 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
 
 
 
ab9c233
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,
        default: Role.USER
    }
});

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

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