Hozifa Elgherbawy commited on
Commit
db65603
·
unverified ·
2 Parent(s): 804a965 f06a425

Merge pull request #105 from Modarb-Ai-Trainer/updateProgress

Browse files

chore: Add createdAt field to meal plan and user registered meal plan models

src/common/models/meal-plan.model.ts CHANGED
@@ -18,6 +18,7 @@ export interface IMealPlan {
18
  }[];
19
  aiGenerated: boolean;
20
  isDeleted: boolean;
 
21
  }
22
 
23
  const mealPlanSchema = new Schema({
@@ -26,6 +27,7 @@ const mealPlanSchema = new Schema({
26
  duration: { type: Number, required: true },
27
  level: { type: String, enum: FitnessLevel, required: true },
28
  your_journey: { type: String, required: false },
 
29
  key_features: [{
30
  title: { type: String, required: false },
31
  description: { type: String, required: false },
 
18
  }[];
19
  aiGenerated: boolean;
20
  isDeleted: boolean;
21
+ createdAt?: Date;
22
  }
23
 
24
  const mealPlanSchema = new Schema({
 
27
  duration: { type: Number, required: true },
28
  level: { type: String, enum: FitnessLevel, required: true },
29
  your_journey: { type: String, required: false },
30
+ createdAt: { type: Date, default: Date.now, required: false },
31
  key_features: [{
32
  title: { type: String, required: false },
33
  description: { type: String, required: false },
src/common/models/user-registered-meal-plan.model.ts CHANGED
@@ -6,6 +6,7 @@ export interface IUserRegisteredMealPlan {
6
  user: string;
7
  isActive: boolean;
8
  meal_plan: string;
 
9
  days: {
10
  day_number: number;
11
  meals: string[];
@@ -17,6 +18,7 @@ const userRegisteredMealPlanSchema = new Schema({
17
  user: { type: mongoose.Types.ObjectId, ref: "users" },
18
  isActive: { type: Boolean, default: true },
19
  meal_plan: { type: mongoose.Types.ObjectId, ref: "mealPlans" },
 
20
  days: [
21
  {
22
  day_number: { type: Number, required: true, },
 
6
  user: string;
7
  isActive: boolean;
8
  meal_plan: string;
9
+ createdAt?: Date;
10
  days: {
11
  day_number: number;
12
  meals: string[];
 
18
  user: { type: mongoose.Types.ObjectId, ref: "users" },
19
  isActive: { type: Boolean, default: true },
20
  meal_plan: { type: mongoose.Types.ObjectId, ref: "mealPlans" },
21
+ createdAt: { type: Date, default: Date.now, required: false },
22
  days: [
23
  {
24
  day_number: { type: Number, required: true, },
src/modules/users/modules/home/controllers/home-nutriguide.controller.ts CHANGED
@@ -17,6 +17,7 @@ import { UserNutriHomeDailyGoalsSerialization } from "../responses/user-nutri-ho
17
  import { GetMyMealPlanSerialization } from "@common/serializers/user-registered-meal-planPopulate.serialization";
18
  import { UserRegisteredMealPlansService } from "../../user-registered-meal-plans/services/user-registered-meal-plans.service";
19
  import { MealPlansProgressService } from "../../user-registered-meal-plans/services/meal-plans-progress.service";
 
20
 
21
 
22
  @Controller("/user/nutri-guide")
@@ -42,9 +43,10 @@ export class homeNutriGuideController extends BaseController {
42
  @SwaggerDescription("Get today's meals for the user.")
43
  getTodayMeals = async (req: IUserRequest, res: Response): Promise<Response> => {
44
  try {
45
- const data = await this.userRegisteredMealPlansService.findOneOrFail(
46
  {
47
- user: req.jwtPayload.id, isActive: true},
 
48
  {
49
  populateArray: [
50
  { path: "meal_plan", select: "-days" },
@@ -55,8 +57,35 @@ export class homeNutriGuideController extends BaseController {
55
  ],
56
  }
57
  );
58
-
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  const dayToEat = data.days.find(day => day.is_eaten === false);
61
 
62
  if (dayToEat) {
 
17
  import { GetMyMealPlanSerialization } from "@common/serializers/user-registered-meal-planPopulate.serialization";
18
  import { UserRegisteredMealPlansService } from "../../user-registered-meal-plans/services/user-registered-meal-plans.service";
19
  import { MealPlansProgressService } from "../../user-registered-meal-plans/services/meal-plans-progress.service";
20
+ import moment from "moment";
21
 
22
 
23
  @Controller("/user/nutri-guide")
 
43
  @SwaggerDescription("Get today's meals for the user.")
44
  getTodayMeals = async (req: IUserRequest, res: Response): Promise<Response> => {
45
  try {
46
+ let data = await this.userRegisteredMealPlansService.findOneOrFail(
47
  {
48
+ user: req.jwtPayload.id, isActive: true
49
+ },
50
  {
51
  populateArray: [
52
  { path: "meal_plan", select: "-days" },
 
57
  ],
58
  }
59
  );
 
60
 
61
+ const today = moment().startOf("day");
62
+ const planStartDay = moment(data.createdAt).startOf("day");
63
+ const daysSinceStart = today.diff(planStartDay, "days");
64
+ const daysToLoop = daysSinceStart > data.days.length - 1 ? data.days.length : daysSinceStart;
65
+ console.log("daysSinceStart", daysSinceStart);
66
+
67
+ for await (const i of Array.from({ length: daysToLoop }, (_, i) => i)){
68
+ if (data.days[i].is_eaten === false) {
69
+ await this.mealPlansProgressService.updateForUser({
70
+ urwId: data._id,
71
+ dayNumber: data.days[i].day_number
72
+ }, req.body, req.jwtPayload.id);
73
+ }
74
+ }
75
+ data = await this.userRegisteredMealPlansService.findOneOrFail(
76
+ {
77
+ user: req.jwtPayload.id, isActive: true
78
+ },
79
+ {
80
+ populateArray: [
81
+ { path: "meal_plan", select: "-days" },
82
+ {
83
+ path: "days.meals",
84
+ populate: { path: "ingredients" }
85
+ }
86
+ ],
87
+ }
88
+ );
89
  const dayToEat = data.days.find(day => day.is_eaten === false);
90
 
91
  if (dayToEat) {