File size: 1,851 Bytes
cbdd38a
f1528d2
d491754
 
 
9d56cbc
 
 
cbdd38a
9d56cbc
 
 
 
cbdd38a
 
9d56cbc
 
f1528d2
 
 
 
 
f402448
9d56cbc
 
 
 
3daae40
d491754
 
cbdd38a
9d56cbc
 
889c2f1
cbdd38a
 
 
 
 
9d56cbc
 
 
 
cbdd38a
 
9d56cbc
 
f1528d2
 
 
 
9d56cbc
f402448
9d56cbc
 
 
 
 
 
 
 
3daae40
d491754
 
 
 
9d56cbc
 
 
 
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
import { ExerciseType } from "@common/enums/exercise-type.enum";
import mongoose, { ObjectId } from "mongoose";
const { Schema } = mongoose;

export interface IExercise {
  name: string;
  category: string;
  duration?: number | null;
  exerciseType: ExerciseType;
  expectedDurationRange: {
    min: number;
    max: number;
  };
  reps?: number;
  sets?: number;
  instructions: string;
  benefits: string;
  targetMuscles: {
    primary: ObjectId;
    secondary: ObjectId;
  }
  equipments: ObjectId[];
  coverImage: string;
  media: {
    type: "image" | "video";
    url: string;
  };
  isDeleted: boolean;
}

const exerciseSchema = new Schema<IExercise>({
  name: { type: String, required: true, unique: true, dropDups: true },
  category: { type: String, required: true },
  duration: { type: Number, required: false, default: 0 },
  exerciseType: {
    type: String,
    required: false,
    enum: ExerciseType
  },
  expectedDurationRange: {
    min: { type: Number, required: true },
    max: { type: Number, required: true },
  },
  reps: { type: Number, required: false },
  sets: { type: Number, required: false },
  instructions: { type: String, required: true },
  benefits: { type: String, required: true },
  targetMuscles: {
    primary: { type: Schema.Types.ObjectId, ref: "muscles" },
    secondary: { type: Schema.Types.ObjectId, ref: "muscles" },
  },
  equipments: [{ type: Schema.Types.ObjectId, ref: "equipments" }],
  coverImage: { type: String, required: true },
  media: {
    type: {
      type: String,
      enum: ["image", "video"],
      required: true,
    },
    url: { type: String, required: true },
  },
  isDeleted: { type: Boolean, default: false },
});

export type ExerciseDocument = IExercise & mongoose.Document;

export const Exercise = mongoose.model<ExerciseDocument>(
  "exercises",
  exerciseSchema
);