Spaces:
Running
Running
Commit
·
c40085b
1
Parent(s):
a443e50
feat(workouts): create new ai gen workout on workout end
Browse files- src/modules/users/modules/user-registered-workouts/controllers/user-registered-workouts.controller.ts +3 -1
- src/modules/users/modules/user-registered-workouts/services/user-registered-workouts.service.ts +0 -30
- src/modules/users/modules/user-registered-workouts/services/workouts-progress.service.ts +46 -0
- src/modules/users/modules/workouts/services/workouts.service.ts +8 -1
src/modules/users/modules/user-registered-workouts/controllers/user-registered-workouts.controller.ts
CHANGED
@@ -22,6 +22,7 @@ import { SwaggerDescription } from "@lib/decorators/swagger-description.decorato
|
|
22 |
import { SwaggerResponse } from "@lib/decorators/swagger-response.decorator";
|
23 |
import { SwaggerRequest } from "@lib/decorators/swagger-request.decorator";import { updateUserRegisteredWorkoutsSchema } from "../validations/update-user-registered-workouts.validation";
|
24 |
import { IUserRequest } from "@common/interfaces/user-request.interface";
|
|
|
25 |
4
|
26 |
|
27 |
|
@@ -29,6 +30,7 @@ import { IUserRequest } from "@common/interfaces/user-request.interface";
|
|
29 |
@ControllerMiddleware(UsersGuardMiddleware())
|
30 |
export class userRegisteredWorkoutsController extends BaseController {
|
31 |
private userRegisteredWorkoutsService = new UserRegisteredWorkoutsService();
|
|
|
32 |
|
33 |
setRoutes(): void {
|
34 |
this.router.get("/:id", asyncHandler(this.get));
|
@@ -124,7 +126,7 @@ export class userRegisteredWorkoutsController extends BaseController {
|
|
124 |
const urwId: string = req.params.id;
|
125 |
const weekNumber: number = Number(req.params.week);
|
126 |
const dayNumber: number = Number(req.params.day);
|
127 |
-
await this.
|
128 |
urwId, weekNumber, dayNumber
|
129 |
}, req.body, req.jwtPayload.id);
|
130 |
return JsonResponse.success(
|
|
|
22 |
import { SwaggerResponse } from "@lib/decorators/swagger-response.decorator";
|
23 |
import { SwaggerRequest } from "@lib/decorators/swagger-request.decorator";import { updateUserRegisteredWorkoutsSchema } from "../validations/update-user-registered-workouts.validation";
|
24 |
import { IUserRequest } from "@common/interfaces/user-request.interface";
|
25 |
+
import { WorkoutsProgressService } from "../services/workouts-progress.service";
|
26 |
4
|
27 |
|
28 |
|
|
|
30 |
@ControllerMiddleware(UsersGuardMiddleware())
|
31 |
export class userRegisteredWorkoutsController extends BaseController {
|
32 |
private userRegisteredWorkoutsService = new UserRegisteredWorkoutsService();
|
33 |
+
private workoutsProgressService = new WorkoutsProgressService();
|
34 |
|
35 |
setRoutes(): void {
|
36 |
this.router.get("/:id", asyncHandler(this.get));
|
|
|
126 |
const urwId: string = req.params.id;
|
127 |
const weekNumber: number = Number(req.params.week);
|
128 |
const dayNumber: number = Number(req.params.day);
|
129 |
+
await this.workoutsProgressService.updateForUser({
|
130 |
urwId, weekNumber, dayNumber
|
131 |
}, req.body, req.jwtPayload.id);
|
132 |
return JsonResponse.success(
|
src/modules/users/modules/user-registered-workouts/services/user-registered-workouts.service.ts
CHANGED
@@ -1,8 +1,6 @@
|
|
1 |
import { UserRegisteredWorkout } from "@common/models/user-registered-workout.model";
|
2 |
import { CrudService } from "@lib/services/crud.service";
|
3 |
import { ICreateUserRegisteredWorkouts } from "../validations/create-user-registered-workouts.validation";
|
4 |
-
import { IUpdateUserRegisteredWorkouts } from "../validations/update-user-registered-workouts.validation";
|
5 |
-
import { HttpError } from "@lib/error-handling/http-error";
|
6 |
import { Workout } from "@common/models/workout.model";
|
7 |
|
8 |
export class UserRegisteredWorkoutsService extends CrudService(UserRegisteredWorkout, {
|
@@ -35,32 +33,4 @@ export class UserRegisteredWorkoutsService extends CrudService(UserRegisteredWor
|
|
35 |
is_active: true,
|
36 |
});
|
37 |
}
|
38 |
-
|
39 |
-
async updateForUser(workoutProps: {urwId: string; weekNumber: number; dayNumber: number}, data: IUpdateUserRegisteredWorkouts, userId: string) {
|
40 |
-
// find workout
|
41 |
-
const workout = await this.findOneOrFail({
|
42 |
-
_id: workoutProps.urwId,
|
43 |
-
user: userId,
|
44 |
-
});
|
45 |
-
|
46 |
-
// find week
|
47 |
-
const week = workout.weeks.find(w => w.week_number === workoutProps.weekNumber);
|
48 |
-
if(!week) throw new HttpError(404, 'Workout Week Not Found');
|
49 |
-
const weekIndex = workout.weeks.indexOf(week);
|
50 |
-
|
51 |
-
// find day
|
52 |
-
const day = week.days.find(d => d.day_number === workoutProps.dayNumber);
|
53 |
-
if(!day) throw new HttpError(404, 'Workout Day Not Found');
|
54 |
-
const dayIndex = week.days.indexOf(day)
|
55 |
-
|
56 |
-
// update day and week
|
57 |
-
day.is_done = true;
|
58 |
-
week.days[dayIndex] = day;
|
59 |
-
week.is_done = week.days.every(d => d.is_done);
|
60 |
-
workout.weeks[weekIndex] = week;
|
61 |
-
|
62 |
-
// save changes
|
63 |
-
workout.markModified('weeks');
|
64 |
-
return workout.save()
|
65 |
-
}
|
66 |
}
|
|
|
1 |
import { UserRegisteredWorkout } from "@common/models/user-registered-workout.model";
|
2 |
import { CrudService } from "@lib/services/crud.service";
|
3 |
import { ICreateUserRegisteredWorkouts } from "../validations/create-user-registered-workouts.validation";
|
|
|
|
|
4 |
import { Workout } from "@common/models/workout.model";
|
5 |
|
6 |
export class UserRegisteredWorkoutsService extends CrudService(UserRegisteredWorkout, {
|
|
|
33 |
is_active: true,
|
34 |
});
|
35 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
}
|
src/modules/users/modules/user-registered-workouts/services/workouts-progress.service.ts
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { UserRegisteredWorkout } from "@common/models/user-registered-workout.model";
|
2 |
+
import { CrudService } from "@lib/services/crud.service";
|
3 |
+
import { IUpdateUserRegisteredWorkouts } from "../validations/update-user-registered-workouts.validation";
|
4 |
+
import { HttpError } from "@lib/error-handling/http-error";
|
5 |
+
import { WorkoutService } from "../../workouts/services/workouts.service";
|
6 |
+
|
7 |
+
export class WorkoutsProgressService extends CrudService(UserRegisteredWorkout, {
|
8 |
+
defaultFilter: {
|
9 |
+
is_active: true,
|
10 |
+
},
|
11 |
+
}) {
|
12 |
+
private workoutsService = new WorkoutService();
|
13 |
+
|
14 |
+
async updateForUser(workoutProps: {urwId: string; weekNumber: number; dayNumber: number}, _data: IUpdateUserRegisteredWorkouts, userId: string) {
|
15 |
+
// find workout
|
16 |
+
const workout = await this.findOneOrFail({
|
17 |
+
_id: workoutProps.urwId,
|
18 |
+
user: userId,
|
19 |
+
});
|
20 |
+
|
21 |
+
// find week
|
22 |
+
const week = workout.weeks.find(w => w.week_number === workoutProps.weekNumber);
|
23 |
+
if(!week) throw new HttpError(404, 'Workout Week Not Found');
|
24 |
+
const weekIndex = workout.weeks.indexOf(week);
|
25 |
+
|
26 |
+
// find day
|
27 |
+
const day = week.days.find(d => d.day_number === workoutProps.dayNumber);
|
28 |
+
if(!day) throw new HttpError(404, 'Workout Day Not Found');
|
29 |
+
const dayIndex = week.days.indexOf(day)
|
30 |
+
|
31 |
+
// update day and week
|
32 |
+
day.is_done = true;
|
33 |
+
week.days[dayIndex] = day;
|
34 |
+
week.is_done = week.days.every(d => d.is_done);
|
35 |
+
workout.weeks[weekIndex] = week;
|
36 |
+
|
37 |
+
// if last week
|
38 |
+
if(weekIndex === workout.weeks.length - 1) {
|
39 |
+
await this.workoutsService.createModelWorkout(userId)
|
40 |
+
}
|
41 |
+
|
42 |
+
// save changes
|
43 |
+
workout.markModified('weeks');
|
44 |
+
return workout.save()
|
45 |
+
}
|
46 |
+
}
|
src/modules/users/modules/workouts/services/workouts.service.ts
CHANGED
@@ -6,12 +6,19 @@ import { CrudService } from "@lib/services/crud.service";
|
|
6 |
import { calcAge } from "@lib/utils/age";
|
7 |
import { ExerciseService } from "../../exercises/services/exercises.service";
|
8 |
import { UserRegisteredWorkoutsService } from "../../user-registered-workouts/services/user-registered-workouts.service";
|
|
|
|
|
9 |
|
10 |
export class WorkoutService extends CrudService(Workout) {
|
11 |
private exerciseService = new ExerciseService();
|
12 |
private userRegisteredWorkoutsService = new UserRegisteredWorkoutsService();
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
-
public async createModelWorkout(user: UserDocument) {
|
15 |
const params: IFWParams = {
|
16 |
home_or_gym: user.preferences.workout_place === WorkoutPlace.GYM ? 1 : 0,
|
17 |
level: user.fitness_level,
|
|
|
6 |
import { calcAge } from "@lib/utils/age";
|
7 |
import { ExerciseService } from "../../exercises/services/exercises.service";
|
8 |
import { UserRegisteredWorkoutsService } from "../../user-registered-workouts/services/user-registered-workouts.service";
|
9 |
+
import { UserService } from "../../users/services/users.service";
|
10 |
+
import { Types } from "mongoose";
|
11 |
|
12 |
export class WorkoutService extends CrudService(Workout) {
|
13 |
private exerciseService = new ExerciseService();
|
14 |
private userRegisteredWorkoutsService = new UserRegisteredWorkoutsService();
|
15 |
+
private usersService = new UserService()
|
16 |
+
|
17 |
+
public async createModelWorkout(userOrId: UserDocument | string) {
|
18 |
+
const user: UserDocument = typeof userOrId === 'string' ?
|
19 |
+
await this.usersService.findOneOrFail({_id: new Types.ObjectId(userOrId)}) :
|
20 |
+
userOrId;
|
21 |
|
|
|
22 |
const params: IFWParams = {
|
23 |
home_or_gym: user.preferences.workout_place === WorkoutPlace.GYM ? 1 : 0,
|
24 |
level: user.fitness_level,
|