Spaces:
Running
Running
import mongoose from "mongoose"; | |
import bcrypt from "bcrypt"; | |
export const saltrounds = 5; | |
const { Schema } = mongoose; | |
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: String }, | |
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 } | |
}); | |
userSchema.pre("save", async function (next) { | |
this.password = await bcrypt.hash(this.password, saltrounds); | |
next(); | |
}); | |
export const userModel = mongoose.model("users", userSchema); | |