youssefkatry907
Small update on user Model
ab9c233
raw
history blame
2.58 kB
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);