File size: 1,626 Bytes
cf14b0a
 
 
 
 
 
 
 
21a9b1b
 
 
 
 
 
 
 
 
 
cf14b0a
 
 
 
21a9b1b
cf14b0a
21a9b1b
cf14b0a
21a9b1b
cf14b0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21a9b1b
cf14b0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import mongoose, { Types } from "mongoose";
import { MealDocument } from "./meal.model";
import { MealPlanDocument } from "./meal-plan.model";
import { WorkoutDocument } from "./workout.model";
import { ExerciseDocument } from "./exercise.model";
import { ActivityType } from "@common/enums/activity-type.enum";
const { Schema } = mongoose;

export type RelatedItem = | MealDocument 
                          | MealPlanDocument 
                          | WorkoutDocument
                          | ExerciseDocument 
                          | { 
                              ingredients: {
                                id: string,
                                noServings: number
                              }[];
                            }
export type AMetaData = {};

export interface IActivity {
  related_item?: RelatedItem;
  meta_data?: AMetaData;
  activity_type: ActivityType;
  related_id?: string | Types.ObjectId;
  user_id: string | Types.ObjectId;
  created_at?: Date;
}

const activitySchema = new Schema({
  related_item: {
    type: Schema.Types.Mixed,
    required: false,
  },
  meta_data: {
    type: Schema.Types.Mixed,
    default: {},
  },
  activity_type: {
    type: String,
    enum: Object.values(ActivityType),
  },
  related_id: {
    type: Schema.Types.ObjectId,
    required: false,
  },
  user_id: {
    type: Schema.Types.ObjectId,
    required: true,
  },
  created_at: {
    type: Date,
    default: Date.now,
  },
});

export type ActivityDocument = IActivity & mongoose.Document;

export const Activity = mongoose.model<ActivityDocument>(
  "activities",
  activitySchema
);