@aneuhold/be-ts-db-lib 4.2.0 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/lib/index.d.ts +15 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +15 -1
- package/lib/index.js.map +1 -1
- package/lib/index.ts +29 -1
- package/lib/repositories/BaseRepository.js +4 -4
- package/lib/repositories/BaseRepository.js.map +1 -1
- package/lib/repositories/BaseRepository.ts +4 -4
- package/lib/util/DbOperationMetaData.d.ts +21 -0
- package/lib/util/DbOperationMetaData.d.ts.map +1 -1
- package/lib/util/DbOperationMetaData.js +28 -0
- package/lib/util/DbOperationMetaData.js.map +1 -1
- package/lib/util/DbOperationMetaData.ts +32 -0
- package/lib/validators/BaseValidator.d.ts +9 -4
- package/lib/validators/BaseValidator.d.ts.map +1 -1
- package/lib/validators/BaseValidator.js +6 -4
- package/lib/validators/BaseValidator.js.map +1 -1
- package/lib/validators/BaseValidator.ts +18 -6
- package/lib/validators/workout/ExerciseCalibrationValidator.d.ts +3 -2
- package/lib/validators/workout/ExerciseCalibrationValidator.d.ts.map +1 -1
- package/lib/validators/workout/ExerciseCalibrationValidator.js +18 -11
- package/lib/validators/workout/ExerciseCalibrationValidator.js.map +1 -1
- package/lib/validators/workout/ExerciseCalibrationValidator.ts +26 -14
- package/lib/validators/workout/ExerciseValidator.d.ts +3 -2
- package/lib/validators/workout/ExerciseValidator.d.ts.map +1 -1
- package/lib/validators/workout/ExerciseValidator.js +32 -18
- package/lib/validators/workout/ExerciseValidator.js.map +1 -1
- package/lib/validators/workout/ExerciseValidator.ts +47 -24
- package/lib/validators/workout/MesocycleValidator.d.ts +1 -1
- package/lib/validators/workout/MesocycleValidator.d.ts.map +1 -1
- package/lib/validators/workout/MesocycleValidator.js +5 -1
- package/lib/validators/workout/MesocycleValidator.js.map +1 -1
- package/lib/validators/workout/MesocycleValidator.ts +7 -1
- package/lib/validators/workout/MicrocycleValidator.d.ts +3 -2
- package/lib/validators/workout/MicrocycleValidator.d.ts.map +1 -1
- package/lib/validators/workout/MicrocycleValidator.js +16 -10
- package/lib/validators/workout/MicrocycleValidator.js.map +1 -1
- package/lib/validators/workout/MicrocycleValidator.ts +26 -13
- package/lib/validators/workout/SessionExerciseValidator.d.ts +3 -2
- package/lib/validators/workout/SessionExerciseValidator.d.ts.map +1 -1
- package/lib/validators/workout/SessionExerciseValidator.js +30 -18
- package/lib/validators/workout/SessionExerciseValidator.js.map +1 -1
- package/lib/validators/workout/SessionExerciseValidator.ts +39 -18
- package/lib/validators/workout/SessionValidator.d.ts +3 -2
- package/lib/validators/workout/SessionValidator.d.ts.map +1 -1
- package/lib/validators/workout/SessionValidator.js +16 -10
- package/lib/validators/workout/SessionValidator.js.map +1 -1
- package/lib/validators/workout/SessionValidator.ts +26 -13
- package/lib/validators/workout/SetValidator.d.ts +3 -2
- package/lib/validators/workout/SetValidator.d.ts.map +1 -1
- package/lib/validators/workout/SetValidator.js +22 -15
- package/lib/validators/workout/SetValidator.js.map +1 -1
- package/lib/validators/workout/SetValidator.ts +34 -20
- package/package.json +3 -3
|
@@ -8,25 +8,32 @@ export default class WorkoutExerciseCalibrationValidator extends IValidator {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
super(WorkoutExerciseCalibrationSchema, WorkoutExerciseCalibrationSchema.partial());
|
|
10
10
|
}
|
|
11
|
-
async validateNewObjectBusinessLogic(newCalibration) {
|
|
12
|
-
//
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
async validateNewObjectBusinessLogic(newCalibration, meta) {
|
|
12
|
+
// Check if exercise is pending creation
|
|
13
|
+
const isPendingExercise = meta?.hasPendingDoc(newCalibration.workoutExerciseId);
|
|
14
|
+
if (!isPendingExercise) {
|
|
15
|
+
// Validate that the exercise exists
|
|
16
|
+
const exerciseRepo = WorkoutExerciseRepository.getRepo();
|
|
17
|
+
const exercise = await exerciseRepo.get({ _id: newCalibration.workoutExerciseId });
|
|
18
|
+
if (!exercise) {
|
|
19
|
+
ErrorUtils.throwError(`Exercise with ID ${newCalibration.workoutExerciseId} does not exist`, newCalibration);
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
|
-
async validateUpdateObjectBusinessLogic(updatedCalibration) {
|
|
23
|
+
async validateUpdateObjectBusinessLogic(updatedCalibration, meta) {
|
|
20
24
|
const errors = [];
|
|
21
25
|
if (!updatedCalibration._id) {
|
|
22
26
|
errors.push('No _id defined for WorkoutExerciseCalibration update.');
|
|
23
27
|
}
|
|
24
28
|
// Validate exercise if being updated
|
|
25
29
|
if (updatedCalibration.workoutExerciseId) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
const isPendingExercise = meta?.hasPendingDoc(updatedCalibration.workoutExerciseId);
|
|
31
|
+
if (!isPendingExercise) {
|
|
32
|
+
const exerciseRepo = WorkoutExerciseRepository.getRepo();
|
|
33
|
+
const exercise = await exerciseRepo.get({ _id: updatedCalibration.workoutExerciseId });
|
|
34
|
+
if (!exercise) {
|
|
35
|
+
errors.push(`Exercise with ID ${updatedCalibration.workoutExerciseId} does not exist`);
|
|
36
|
+
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
if (errors.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExerciseCalibrationValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/ExerciseCalibrationValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,cAAc,MAAM,6CAA6C,CAAC;AACzE,OAAO,oCAAoC,MAAM,oEAAoE,CAAC;AACtH,OAAO,yBAAyB,MAAM,yDAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"ExerciseCalibrationValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/ExerciseCalibrationValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { UUID } from 'crypto';
|
|
|
5
5
|
import UserRepository from '../../repositories/common/UserRepository.js';
|
|
6
6
|
import WorkoutExerciseCalibrationRepository from '../../repositories/workout/WorkoutExerciseCalibrationRepository.js';
|
|
7
7
|
import WorkoutExerciseRepository from '../../repositories/workout/WorkoutExerciseRepository.js';
|
|
8
|
+
import type DbOperationMetaData from '../../util/DbOperationMetaData.js';
|
|
8
9
|
import IValidator from '../BaseValidator.js';
|
|
9
10
|
|
|
10
11
|
export default class WorkoutExerciseCalibrationValidator extends IValidator<WorkoutExerciseCalibration> {
|
|
@@ -13,21 +14,28 @@ export default class WorkoutExerciseCalibrationValidator extends IValidator<Work
|
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
protected async validateNewObjectBusinessLogic(
|
|
16
|
-
newCalibration: WorkoutExerciseCalibration
|
|
17
|
+
newCalibration: WorkoutExerciseCalibration,
|
|
18
|
+
meta?: DbOperationMetaData
|
|
17
19
|
): Promise<void> {
|
|
18
|
-
//
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
if (!
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
)
|
|
20
|
+
// Check if exercise is pending creation
|
|
21
|
+
const isPendingExercise = meta?.hasPendingDoc(newCalibration.workoutExerciseId);
|
|
22
|
+
|
|
23
|
+
if (!isPendingExercise) {
|
|
24
|
+
// Validate that the exercise exists
|
|
25
|
+
const exerciseRepo = WorkoutExerciseRepository.getRepo();
|
|
26
|
+
const exercise = await exerciseRepo.get({ _id: newCalibration.workoutExerciseId });
|
|
27
|
+
if (!exercise) {
|
|
28
|
+
ErrorUtils.throwError(
|
|
29
|
+
`Exercise with ID ${newCalibration.workoutExerciseId} does not exist`,
|
|
30
|
+
newCalibration
|
|
31
|
+
);
|
|
32
|
+
}
|
|
26
33
|
}
|
|
27
34
|
}
|
|
28
35
|
|
|
29
36
|
protected async validateUpdateObjectBusinessLogic(
|
|
30
|
-
updatedCalibration: Partial<WorkoutExerciseCalibration
|
|
37
|
+
updatedCalibration: Partial<WorkoutExerciseCalibration>,
|
|
38
|
+
meta?: DbOperationMetaData
|
|
31
39
|
): Promise<void> {
|
|
32
40
|
const errors: string[] = [];
|
|
33
41
|
|
|
@@ -37,10 +45,14 @@ export default class WorkoutExerciseCalibrationValidator extends IValidator<Work
|
|
|
37
45
|
|
|
38
46
|
// Validate exercise if being updated
|
|
39
47
|
if (updatedCalibration.workoutExerciseId) {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
if (!
|
|
43
|
-
|
|
48
|
+
const isPendingExercise = meta?.hasPendingDoc(updatedCalibration.workoutExerciseId);
|
|
49
|
+
|
|
50
|
+
if (!isPendingExercise) {
|
|
51
|
+
const exerciseRepo = WorkoutExerciseRepository.getRepo();
|
|
52
|
+
const exercise = await exerciseRepo.get({ _id: updatedCalibration.workoutExerciseId });
|
|
53
|
+
if (!exercise) {
|
|
54
|
+
errors.push(`Exercise with ID ${updatedCalibration.workoutExerciseId} does not exist`);
|
|
55
|
+
}
|
|
44
56
|
}
|
|
45
57
|
}
|
|
46
58
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { WorkoutExercise } from '@aneuhold/core-ts-db-lib';
|
|
2
|
+
import type DbOperationMetaData from '../../util/DbOperationMetaData.js';
|
|
2
3
|
import IValidator from '../BaseValidator.js';
|
|
3
4
|
export default class WorkoutExerciseValidator extends IValidator<WorkoutExercise> {
|
|
4
5
|
constructor();
|
|
5
|
-
protected validateNewObjectBusinessLogic(newExercise: WorkoutExercise): Promise<void>;
|
|
6
|
-
protected validateUpdateObjectBusinessLogic(updatedExercise: Partial<WorkoutExercise
|
|
6
|
+
protected validateNewObjectBusinessLogic(newExercise: WorkoutExercise, meta?: DbOperationMetaData): Promise<void>;
|
|
7
|
+
protected validateUpdateObjectBusinessLogic(updatedExercise: Partial<WorkoutExercise>, meta?: DbOperationMetaData): Promise<void>;
|
|
7
8
|
validateRepositoryInDb(dryRun: boolean): Promise<void>;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=ExerciseValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExerciseValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/ExerciseValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQhE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,UAAU,CAAC,eAAe,CAAC;;cAK/D,8BAA8B,
|
|
1
|
+
{"version":3,"file":"ExerciseValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/ExerciseValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQhE,OAAO,KAAK,mBAAmB,MAAM,mCAAmC,CAAC;AACzE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,UAAU,CAAC,eAAe,CAAC;;cAK/D,8BAA8B,CAC5C,WAAW,EAAE,eAAe,EAC5B,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;cAyCA,iCAAiC,CAC/C,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,EACzC,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;IAoDV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA+D7D"}
|
|
@@ -9,7 +9,7 @@ export default class WorkoutExerciseValidator extends IValidator {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
super(WorkoutExerciseSchema, WorkoutExerciseSchema.partial());
|
|
11
11
|
}
|
|
12
|
-
async validateNewObjectBusinessLogic(newExercise) {
|
|
12
|
+
async validateNewObjectBusinessLogic(newExercise, meta) {
|
|
13
13
|
const errors = [];
|
|
14
14
|
// Collect all muscle group IDs
|
|
15
15
|
const allMuscleGroupIds = [
|
|
@@ -18,23 +18,30 @@ export default class WorkoutExerciseValidator extends IValidator {
|
|
|
18
18
|
];
|
|
19
19
|
// Validate muscle groups exist
|
|
20
20
|
if (allMuscleGroupIds.length > 0) {
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
|
|
21
|
+
// Filter out muscle groups that are pending creation
|
|
22
|
+
const muscleGroupIdsToCheck = allMuscleGroupIds.filter((id) => !meta?.hasPendingDoc(id));
|
|
23
|
+
if (muscleGroupIdsToCheck.length > 0) {
|
|
24
|
+
const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
|
|
25
|
+
const muscleGroups = await muscleGroupRepo.getList(muscleGroupIdsToCheck);
|
|
26
|
+
if (muscleGroups.length !== muscleGroupIdsToCheck.length) {
|
|
27
|
+
errors.push(`Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${muscleGroupIdsToCheck.length}`);
|
|
28
|
+
}
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
// Validate equipment type exists
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
const isPendingEquipmentType = meta?.hasPendingDoc(newExercise.workoutEquipmentTypeId);
|
|
33
|
+
if (!isPendingEquipmentType) {
|
|
34
|
+
const equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
|
|
35
|
+
const equipment = await equipmentRepo.get({ _id: newExercise.workoutEquipmentTypeId });
|
|
36
|
+
if (!equipment) {
|
|
37
|
+
errors.push(`Equipment type with ID ${newExercise.workoutEquipmentTypeId} does not exist`);
|
|
38
|
+
}
|
|
32
39
|
}
|
|
33
40
|
if (errors.length > 0) {
|
|
34
41
|
ErrorUtils.throwErrorList(errors, newExercise);
|
|
35
42
|
}
|
|
36
43
|
}
|
|
37
|
-
async validateUpdateObjectBusinessLogic(updatedExercise) {
|
|
44
|
+
async validateUpdateObjectBusinessLogic(updatedExercise, meta) {
|
|
38
45
|
const errors = [];
|
|
39
46
|
if (!updatedExercise._id) {
|
|
40
47
|
errors.push('No _id defined for WorkoutExercise update.');
|
|
@@ -49,18 +56,25 @@ export default class WorkoutExerciseValidator extends IValidator {
|
|
|
49
56
|
}
|
|
50
57
|
// Validate muscle groups if being updated
|
|
51
58
|
if (allMuscleGroupIds.length > 0) {
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
55
|
-
|
|
59
|
+
// Filter out muscle groups that are pending creation
|
|
60
|
+
const muscleGroupIdsToCheck = allMuscleGroupIds.filter((id) => !meta?.hasPendingDoc(id));
|
|
61
|
+
if (muscleGroupIdsToCheck.length > 0) {
|
|
62
|
+
const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
|
|
63
|
+
const muscleGroups = await muscleGroupRepo.getList(muscleGroupIdsToCheck);
|
|
64
|
+
if (muscleGroups.length !== muscleGroupIdsToCheck.length) {
|
|
65
|
+
errors.push(`Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${muscleGroupIdsToCheck.length}`);
|
|
66
|
+
}
|
|
56
67
|
}
|
|
57
68
|
}
|
|
58
69
|
// Validate equipment type if being updated
|
|
59
70
|
if (updatedExercise.workoutEquipmentTypeId) {
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
const isPendingEquipmentType = meta?.hasPendingDoc(updatedExercise.workoutEquipmentTypeId);
|
|
72
|
+
if (!isPendingEquipmentType) {
|
|
73
|
+
const equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
|
|
74
|
+
const equipment = await equipmentRepo.get({ _id: updatedExercise.workoutEquipmentTypeId });
|
|
75
|
+
if (!equipment) {
|
|
76
|
+
errors.push(`Equipment type with ID ${updatedExercise.workoutEquipmentTypeId} does not exist`);
|
|
77
|
+
}
|
|
64
78
|
}
|
|
65
79
|
}
|
|
66
80
|
if (errors.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExerciseValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/ExerciseValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,cAAc,MAAM,6CAA6C,CAAC;AACzE,OAAO,8BAA8B,MAAM,8DAA8D,CAAC;AAC1G,OAAO,yBAAyB,MAAM,yDAAyD,CAAC;AAChG,OAAO,4BAA4B,MAAM,4DAA4D,CAAC;
|
|
1
|
+
{"version":3,"file":"ExerciseValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/ExerciseValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import UserRepository from '../../repositories/common/UserRepository.js';
|
|
|
6
6
|
import WorkoutEquipmentTypeRepository from '../../repositories/workout/WorkoutEquipmentTypeRepository.js';
|
|
7
7
|
import WorkoutExerciseRepository from '../../repositories/workout/WorkoutExerciseRepository.js';
|
|
8
8
|
import WorkoutMuscleGroupRepository from '../../repositories/workout/WorkoutMuscleGroupRepository.js';
|
|
9
|
+
import type DbOperationMetaData from '../../util/DbOperationMetaData.js';
|
|
9
10
|
import IValidator from '../BaseValidator.js';
|
|
10
11
|
|
|
11
12
|
export default class WorkoutExerciseValidator extends IValidator<WorkoutExercise> {
|
|
@@ -13,7 +14,10 @@ export default class WorkoutExerciseValidator extends IValidator<WorkoutExercise
|
|
|
13
14
|
super(WorkoutExerciseSchema, WorkoutExerciseSchema.partial());
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
protected async validateNewObjectBusinessLogic(
|
|
17
|
+
protected async validateNewObjectBusinessLogic(
|
|
18
|
+
newExercise: WorkoutExercise,
|
|
19
|
+
meta?: DbOperationMetaData
|
|
20
|
+
): Promise<void> {
|
|
17
21
|
const errors: string[] = [];
|
|
18
22
|
|
|
19
23
|
// Collect all muscle group IDs
|
|
@@ -24,20 +28,29 @@ export default class WorkoutExerciseValidator extends IValidator<WorkoutExercise
|
|
|
24
28
|
|
|
25
29
|
// Validate muscle groups exist
|
|
26
30
|
if (allMuscleGroupIds.length > 0) {
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
);
|
|
31
|
+
// Filter out muscle groups that are pending creation
|
|
32
|
+
const muscleGroupIdsToCheck = allMuscleGroupIds.filter((id) => !meta?.hasPendingDoc(id));
|
|
33
|
+
|
|
34
|
+
if (muscleGroupIdsToCheck.length > 0) {
|
|
35
|
+
const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
|
|
36
|
+
const muscleGroups = await muscleGroupRepo.getList(muscleGroupIdsToCheck);
|
|
37
|
+
if (muscleGroups.length !== muscleGroupIdsToCheck.length) {
|
|
38
|
+
errors.push(
|
|
39
|
+
`Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${muscleGroupIdsToCheck.length}`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
33
42
|
}
|
|
34
43
|
}
|
|
35
44
|
|
|
36
45
|
// Validate equipment type exists
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
if (!
|
|
40
|
-
|
|
46
|
+
const isPendingEquipmentType = meta?.hasPendingDoc(newExercise.workoutEquipmentTypeId);
|
|
47
|
+
|
|
48
|
+
if (!isPendingEquipmentType) {
|
|
49
|
+
const equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
|
|
50
|
+
const equipment = await equipmentRepo.get({ _id: newExercise.workoutEquipmentTypeId });
|
|
51
|
+
if (!equipment) {
|
|
52
|
+
errors.push(`Equipment type with ID ${newExercise.workoutEquipmentTypeId} does not exist`);
|
|
53
|
+
}
|
|
41
54
|
}
|
|
42
55
|
|
|
43
56
|
if (errors.length > 0) {
|
|
@@ -46,7 +59,8 @@ export default class WorkoutExerciseValidator extends IValidator<WorkoutExercise
|
|
|
46
59
|
}
|
|
47
60
|
|
|
48
61
|
protected async validateUpdateObjectBusinessLogic(
|
|
49
|
-
updatedExercise: Partial<WorkoutExercise
|
|
62
|
+
updatedExercise: Partial<WorkoutExercise>,
|
|
63
|
+
meta?: DbOperationMetaData
|
|
50
64
|
): Promise<void> {
|
|
51
65
|
const errors: string[] = [];
|
|
52
66
|
|
|
@@ -65,23 +79,32 @@ export default class WorkoutExerciseValidator extends IValidator<WorkoutExercise
|
|
|
65
79
|
|
|
66
80
|
// Validate muscle groups if being updated
|
|
67
81
|
if (allMuscleGroupIds.length > 0) {
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
);
|
|
82
|
+
// Filter out muscle groups that are pending creation
|
|
83
|
+
const muscleGroupIdsToCheck = allMuscleGroupIds.filter((id) => !meta?.hasPendingDoc(id));
|
|
84
|
+
|
|
85
|
+
if (muscleGroupIdsToCheck.length > 0) {
|
|
86
|
+
const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
|
|
87
|
+
const muscleGroups = await muscleGroupRepo.getList(muscleGroupIdsToCheck);
|
|
88
|
+
if (muscleGroups.length !== muscleGroupIdsToCheck.length) {
|
|
89
|
+
errors.push(
|
|
90
|
+
`Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${muscleGroupIdsToCheck.length}`
|
|
91
|
+
);
|
|
92
|
+
}
|
|
74
93
|
}
|
|
75
94
|
}
|
|
76
95
|
|
|
77
96
|
// Validate equipment type if being updated
|
|
78
97
|
if (updatedExercise.workoutEquipmentTypeId) {
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
if (!
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
)
|
|
98
|
+
const isPendingEquipmentType = meta?.hasPendingDoc(updatedExercise.workoutEquipmentTypeId);
|
|
99
|
+
|
|
100
|
+
if (!isPendingEquipmentType) {
|
|
101
|
+
const equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
|
|
102
|
+
const equipment = await equipmentRepo.get({ _id: updatedExercise.workoutEquipmentTypeId });
|
|
103
|
+
if (!equipment) {
|
|
104
|
+
errors.push(
|
|
105
|
+
`Equipment type with ID ${updatedExercise.workoutEquipmentTypeId} does not exist`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
85
108
|
}
|
|
86
109
|
}
|
|
87
110
|
|
|
@@ -2,7 +2,7 @@ import type { WorkoutMesocycle } from '@aneuhold/core-ts-db-lib';
|
|
|
2
2
|
import IValidator from '../BaseValidator.js';
|
|
3
3
|
export default class WorkoutMesocycleValidator extends IValidator<WorkoutMesocycle> {
|
|
4
4
|
constructor();
|
|
5
|
-
protected validateNewObjectBusinessLogic(): Promise<void>;
|
|
5
|
+
protected validateNewObjectBusinessLogic(mesocycle: WorkoutMesocycle): Promise<void>;
|
|
6
6
|
protected validateUpdateObjectBusinessLogic(updatedMesocycle: Partial<WorkoutMesocycle>): Promise<void>;
|
|
7
7
|
validateRepositoryInDb(dryRun: boolean): Promise<void>;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MesocycleValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/MesocycleValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAOjE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,UAAU,CAAC,gBAAgB,CAAC;;IAKjF,SAAS,CAAC,8BAA8B,
|
|
1
|
+
{"version":3,"file":"MesocycleValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/MesocycleValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAOjE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,UAAU,CAAC,gBAAgB,CAAC;;IAKjF,SAAS,CAAC,8BAA8B,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpF,SAAS,CAAC,iCAAiC,CACzC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC;IAOV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA6C7D"}
|
|
@@ -8,7 +8,11 @@ export default class WorkoutMesocycleValidator extends IValidator {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
super(WorkoutMesocycleSchema, WorkoutMesocycleSchema.partial());
|
|
10
10
|
}
|
|
11
|
-
validateNewObjectBusinessLogic() {
|
|
11
|
+
validateNewObjectBusinessLogic(mesocycle) {
|
|
12
|
+
if (mesocycle.calibratedExercises.length < mesocycle.plannedSessionCountPerMicrocycle) {
|
|
13
|
+
throw new Error('Number of calibrated exercises must be at least equal to planned sessions per microcycle.' +
|
|
14
|
+
' Create a slight variation of an existing exercise if needed.');
|
|
15
|
+
}
|
|
12
16
|
return Promise.resolve();
|
|
13
17
|
}
|
|
14
18
|
validateUpdateObjectBusinessLogic(updatedMesocycle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MesocycleValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/MesocycleValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,cAAc,MAAM,6CAA6C,CAAC;AACzE,OAAO,oCAAoC,MAAM,oEAAoE,CAAC;AACtH,OAAO,0BAA0B,MAAM,0DAA0D,CAAC;AAClG,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,UAA4B;IACjF;QACE,KAAK,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAES,8BAA8B;
|
|
1
|
+
{"version":3,"file":"MesocycleValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/MesocycleValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,13 @@ export default class WorkoutMesocycleValidator extends IValidator<WorkoutMesocyc
|
|
|
12
12
|
super(WorkoutMesocycleSchema, WorkoutMesocycleSchema.partial());
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
protected validateNewObjectBusinessLogic(): Promise<void> {
|
|
15
|
+
protected validateNewObjectBusinessLogic(mesocycle: WorkoutMesocycle): Promise<void> {
|
|
16
|
+
if (mesocycle.calibratedExercises.length < mesocycle.plannedSessionCountPerMicrocycle) {
|
|
17
|
+
throw new Error(
|
|
18
|
+
'Number of calibrated exercises must be at least equal to planned sessions per microcycle.' +
|
|
19
|
+
' Create a slight variation of an existing exercise if needed.'
|
|
20
|
+
);
|
|
21
|
+
}
|
|
16
22
|
return Promise.resolve();
|
|
17
23
|
}
|
|
18
24
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { WorkoutMicrocycle } from '@aneuhold/core-ts-db-lib';
|
|
2
|
+
import type DbOperationMetaData from '../../util/DbOperationMetaData.js';
|
|
2
3
|
import IValidator from '../BaseValidator.js';
|
|
3
4
|
export default class WorkoutMicrocycleValidator extends IValidator<WorkoutMicrocycle> {
|
|
4
5
|
constructor();
|
|
5
|
-
protected validateNewObjectBusinessLogic(newMicrocycle: WorkoutMicrocycle): Promise<void>;
|
|
6
|
-
protected validateUpdateObjectBusinessLogic(updatedMicrocycle: Partial<WorkoutMicrocycle
|
|
6
|
+
protected validateNewObjectBusinessLogic(newMicrocycle: WorkoutMicrocycle, meta?: DbOperationMetaData): Promise<void>;
|
|
7
|
+
protected validateUpdateObjectBusinessLogic(updatedMicrocycle: Partial<WorkoutMicrocycle>, meta?: DbOperationMetaData): Promise<void>;
|
|
7
8
|
validateRepositoryInDb(dryRun: boolean): Promise<void>;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=MicrocycleValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicrocycleValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/MicrocycleValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,UAAU,CAAC,iBAAiB,CAAC;;cAKnE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"MicrocycleValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/MicrocycleValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,OAAO,KAAK,mBAAmB,MAAM,mCAAmC,CAAC;AACzE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,UAAU,CAAC,iBAAiB,CAAC;;cAKnE,8BAA8B,CAC5C,aAAa,EAAE,iBAAiB,EAChC,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;cAkBA,iCAAiC,CAC/C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAC7C,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;IAyBV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAuC7D"}
|
|
@@ -8,27 +8,33 @@ export default class WorkoutMicrocycleValidator extends IValidator {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
super(WorkoutMicrocycleSchema, WorkoutMicrocycleSchema.partial());
|
|
10
10
|
}
|
|
11
|
-
async validateNewObjectBusinessLogic(newMicrocycle) {
|
|
11
|
+
async validateNewObjectBusinessLogic(newMicrocycle, meta) {
|
|
12
12
|
// Validate that the mesocycle exists if workoutMesocycleId is provided
|
|
13
13
|
if (newMicrocycle.workoutMesocycleId) {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const isPendingMesocycle = meta?.hasPendingDoc(newMicrocycle.workoutMesocycleId);
|
|
15
|
+
if (!isPendingMesocycle) {
|
|
16
|
+
const mesocycleRepo = WorkoutMesocycleRepository.getRepo();
|
|
17
|
+
const mesocycle = await mesocycleRepo.get({ _id: newMicrocycle.workoutMesocycleId });
|
|
18
|
+
if (!mesocycle) {
|
|
19
|
+
ErrorUtils.throwError(`Mesocycle with ID ${newMicrocycle.workoutMesocycleId} does not exist`, newMicrocycle);
|
|
20
|
+
}
|
|
18
21
|
}
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
|
-
async validateUpdateObjectBusinessLogic(updatedMicrocycle) {
|
|
24
|
+
async validateUpdateObjectBusinessLogic(updatedMicrocycle, meta) {
|
|
22
25
|
const errors = [];
|
|
23
26
|
if (!updatedMicrocycle._id) {
|
|
24
27
|
errors.push('No _id defined for WorkoutMicrocycle update.');
|
|
25
28
|
}
|
|
26
29
|
// Validate mesocycle if being updated
|
|
27
30
|
if (updatedMicrocycle.workoutMesocycleId) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
const isPendingMesocycle = meta?.hasPendingDoc(updatedMicrocycle.workoutMesocycleId);
|
|
32
|
+
if (!isPendingMesocycle) {
|
|
33
|
+
const mesocycleRepo = WorkoutMesocycleRepository.getRepo();
|
|
34
|
+
const mesocycle = await mesocycleRepo.get({ _id: updatedMicrocycle.workoutMesocycleId });
|
|
35
|
+
if (!mesocycle) {
|
|
36
|
+
errors.push(`Mesocycle with ID ${updatedMicrocycle.workoutMesocycleId} does not exist`);
|
|
37
|
+
}
|
|
32
38
|
}
|
|
33
39
|
}
|
|
34
40
|
if (errors.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicrocycleValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/MicrocycleValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,cAAc,MAAM,6CAA6C,CAAC;AACzE,OAAO,0BAA0B,MAAM,0DAA0D,CAAC;AAClG,OAAO,2BAA2B,MAAM,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"MicrocycleValidator.js","sourceRoot":"","sources":["../../../src/validators/workout/MicrocycleValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { UUID } from 'crypto';
|
|
|
5
5
|
import UserRepository from '../../repositories/common/UserRepository.js';
|
|
6
6
|
import WorkoutMesocycleRepository from '../../repositories/workout/WorkoutMesocycleRepository.js';
|
|
7
7
|
import WorkoutMicrocycleRepository from '../../repositories/workout/WorkoutMicrocycleRepository.js';
|
|
8
|
+
import type DbOperationMetaData from '../../util/DbOperationMetaData.js';
|
|
8
9
|
import IValidator from '../BaseValidator.js';
|
|
9
10
|
|
|
10
11
|
export default class WorkoutMicrocycleValidator extends IValidator<WorkoutMicrocycle> {
|
|
@@ -12,22 +13,30 @@ export default class WorkoutMicrocycleValidator extends IValidator<WorkoutMicroc
|
|
|
12
13
|
super(WorkoutMicrocycleSchema, WorkoutMicrocycleSchema.partial());
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
protected async validateNewObjectBusinessLogic(
|
|
16
|
+
protected async validateNewObjectBusinessLogic(
|
|
17
|
+
newMicrocycle: WorkoutMicrocycle,
|
|
18
|
+
meta?: DbOperationMetaData
|
|
19
|
+
): Promise<void> {
|
|
16
20
|
// Validate that the mesocycle exists if workoutMesocycleId is provided
|
|
17
21
|
if (newMicrocycle.workoutMesocycleId) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
if (!
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
const isPendingMesocycle = meta?.hasPendingDoc(newMicrocycle.workoutMesocycleId);
|
|
23
|
+
|
|
24
|
+
if (!isPendingMesocycle) {
|
|
25
|
+
const mesocycleRepo = WorkoutMesocycleRepository.getRepo();
|
|
26
|
+
const mesocycle = await mesocycleRepo.get({ _id: newMicrocycle.workoutMesocycleId });
|
|
27
|
+
if (!mesocycle) {
|
|
28
|
+
ErrorUtils.throwError(
|
|
29
|
+
`Mesocycle with ID ${newMicrocycle.workoutMesocycleId} does not exist`,
|
|
30
|
+
newMicrocycle
|
|
31
|
+
);
|
|
32
|
+
}
|
|
25
33
|
}
|
|
26
34
|
}
|
|
27
35
|
}
|
|
28
36
|
|
|
29
37
|
protected async validateUpdateObjectBusinessLogic(
|
|
30
|
-
updatedMicrocycle: Partial<WorkoutMicrocycle
|
|
38
|
+
updatedMicrocycle: Partial<WorkoutMicrocycle>,
|
|
39
|
+
meta?: DbOperationMetaData
|
|
31
40
|
): Promise<void> {
|
|
32
41
|
const errors: string[] = [];
|
|
33
42
|
|
|
@@ -37,10 +46,14 @@ export default class WorkoutMicrocycleValidator extends IValidator<WorkoutMicroc
|
|
|
37
46
|
|
|
38
47
|
// Validate mesocycle if being updated
|
|
39
48
|
if (updatedMicrocycle.workoutMesocycleId) {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
if (!
|
|
43
|
-
|
|
49
|
+
const isPendingMesocycle = meta?.hasPendingDoc(updatedMicrocycle.workoutMesocycleId);
|
|
50
|
+
|
|
51
|
+
if (!isPendingMesocycle) {
|
|
52
|
+
const mesocycleRepo = WorkoutMesocycleRepository.getRepo();
|
|
53
|
+
const mesocycle = await mesocycleRepo.get({ _id: updatedMicrocycle.workoutMesocycleId });
|
|
54
|
+
if (!mesocycle) {
|
|
55
|
+
errors.push(`Mesocycle with ID ${updatedMicrocycle.workoutMesocycleId} does not exist`);
|
|
56
|
+
}
|
|
44
57
|
}
|
|
45
58
|
}
|
|
46
59
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { WorkoutSessionExercise } from '@aneuhold/core-ts-db-lib';
|
|
2
|
+
import type DbOperationMetaData from '../../util/DbOperationMetaData.js';
|
|
2
3
|
import IValidator from '../BaseValidator.js';
|
|
3
4
|
export default class WorkoutSessionExerciseValidator extends IValidator<WorkoutSessionExercise> {
|
|
4
5
|
constructor();
|
|
5
|
-
protected validateNewObjectBusinessLogic(newSessionExercise: WorkoutSessionExercise): Promise<void>;
|
|
6
|
-
protected validateUpdateObjectBusinessLogic(updatedSessionExercise: Partial<WorkoutSessionExercise
|
|
6
|
+
protected validateNewObjectBusinessLogic(newSessionExercise: WorkoutSessionExercise, meta?: DbOperationMetaData): Promise<void>;
|
|
7
|
+
protected validateUpdateObjectBusinessLogic(updatedSessionExercise: Partial<WorkoutSessionExercise>, meta?: DbOperationMetaData): Promise<void>;
|
|
7
8
|
validateRepositoryInDb(dryRun: boolean): Promise<void>;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=SessionExerciseValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionExerciseValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/SessionExerciseValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAQvE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,UAAU,CAAC,sBAAsB,CAAC;;cAK7E,8BAA8B,CAC5C,kBAAkB,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"SessionExerciseValidator.d.ts","sourceRoot":"","sources":["../../../src/validators/workout/SessionExerciseValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAQvE,OAAO,KAAK,mBAAmB,MAAM,mCAAmC,CAAC;AACzE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,UAAU,CAAC,sBAAsB,CAAC;;cAK7E,8BAA8B,CAC5C,kBAAkB,EAAE,sBAAsB,EAC1C,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;cA8BA,iCAAiC,CAC/C,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACvD,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;IAwCV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA6C7D"}
|