@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.
Files changed (55) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/lib/index.d.ts +15 -1
  3. package/lib/index.d.ts.map +1 -1
  4. package/lib/index.js +15 -1
  5. package/lib/index.js.map +1 -1
  6. package/lib/index.ts +29 -1
  7. package/lib/repositories/BaseRepository.js +4 -4
  8. package/lib/repositories/BaseRepository.js.map +1 -1
  9. package/lib/repositories/BaseRepository.ts +4 -4
  10. package/lib/util/DbOperationMetaData.d.ts +21 -0
  11. package/lib/util/DbOperationMetaData.d.ts.map +1 -1
  12. package/lib/util/DbOperationMetaData.js +28 -0
  13. package/lib/util/DbOperationMetaData.js.map +1 -1
  14. package/lib/util/DbOperationMetaData.ts +32 -0
  15. package/lib/validators/BaseValidator.d.ts +9 -4
  16. package/lib/validators/BaseValidator.d.ts.map +1 -1
  17. package/lib/validators/BaseValidator.js +6 -4
  18. package/lib/validators/BaseValidator.js.map +1 -1
  19. package/lib/validators/BaseValidator.ts +18 -6
  20. package/lib/validators/workout/ExerciseCalibrationValidator.d.ts +3 -2
  21. package/lib/validators/workout/ExerciseCalibrationValidator.d.ts.map +1 -1
  22. package/lib/validators/workout/ExerciseCalibrationValidator.js +18 -11
  23. package/lib/validators/workout/ExerciseCalibrationValidator.js.map +1 -1
  24. package/lib/validators/workout/ExerciseCalibrationValidator.ts +26 -14
  25. package/lib/validators/workout/ExerciseValidator.d.ts +3 -2
  26. package/lib/validators/workout/ExerciseValidator.d.ts.map +1 -1
  27. package/lib/validators/workout/ExerciseValidator.js +32 -18
  28. package/lib/validators/workout/ExerciseValidator.js.map +1 -1
  29. package/lib/validators/workout/ExerciseValidator.ts +47 -24
  30. package/lib/validators/workout/MesocycleValidator.d.ts +1 -1
  31. package/lib/validators/workout/MesocycleValidator.d.ts.map +1 -1
  32. package/lib/validators/workout/MesocycleValidator.js +5 -1
  33. package/lib/validators/workout/MesocycleValidator.js.map +1 -1
  34. package/lib/validators/workout/MesocycleValidator.ts +7 -1
  35. package/lib/validators/workout/MicrocycleValidator.d.ts +3 -2
  36. package/lib/validators/workout/MicrocycleValidator.d.ts.map +1 -1
  37. package/lib/validators/workout/MicrocycleValidator.js +16 -10
  38. package/lib/validators/workout/MicrocycleValidator.js.map +1 -1
  39. package/lib/validators/workout/MicrocycleValidator.ts +26 -13
  40. package/lib/validators/workout/SessionExerciseValidator.d.ts +3 -2
  41. package/lib/validators/workout/SessionExerciseValidator.d.ts.map +1 -1
  42. package/lib/validators/workout/SessionExerciseValidator.js +30 -18
  43. package/lib/validators/workout/SessionExerciseValidator.js.map +1 -1
  44. package/lib/validators/workout/SessionExerciseValidator.ts +39 -18
  45. package/lib/validators/workout/SessionValidator.d.ts +3 -2
  46. package/lib/validators/workout/SessionValidator.d.ts.map +1 -1
  47. package/lib/validators/workout/SessionValidator.js +16 -10
  48. package/lib/validators/workout/SessionValidator.js.map +1 -1
  49. package/lib/validators/workout/SessionValidator.ts +26 -13
  50. package/lib/validators/workout/SetValidator.d.ts +3 -2
  51. package/lib/validators/workout/SetValidator.d.ts.map +1 -1
  52. package/lib/validators/workout/SetValidator.js +22 -15
  53. package/lib/validators/workout/SetValidator.js.map +1 -1
  54. package/lib/validators/workout/SetValidator.ts +34 -20
  55. 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
- // Validate that the exercise exists
13
- const exerciseRepo = WorkoutExerciseRepository.getRepo();
14
- const exercise = await exerciseRepo.get({ _id: newCalibration.workoutExerciseId });
15
- if (!exercise) {
16
- ErrorUtils.throwError(`Exercise with ID ${newCalibration.workoutExerciseId} does not exist`, newCalibration);
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 exerciseRepo = WorkoutExerciseRepository.getRepo();
27
- const exercise = await exerciseRepo.get({ _id: updatedCalibration.workoutExerciseId });
28
- if (!exercise) {
29
- errors.push(`Exercise with ID ${updatedCalibration.workoutExerciseId} does not exist`);
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":"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"}
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
- // Validate that the exercise exists
19
- const exerciseRepo = WorkoutExerciseRepository.getRepo();
20
- const exercise = await exerciseRepo.get({ _id: newCalibration.workoutExerciseId });
21
- if (!exercise) {
22
- ErrorUtils.throwError(
23
- `Exercise with ID ${newCalibration.workoutExerciseId} does not exist`,
24
- newCalibration
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 exerciseRepo = WorkoutExerciseRepository.getRepo();
41
- const exercise = await exerciseRepo.get({ _id: updatedCalibration.workoutExerciseId });
42
- if (!exercise) {
43
- errors.push(`Exercise with ID ${updatedCalibration.workoutExerciseId} does not exist`);
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>): Promise<void>;
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,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;cAgC3E,iCAAiC,CAC/C,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC;IA2CV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA+D7D"}
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
- const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
22
- const muscleGroups = await muscleGroupRepo.getList(allMuscleGroupIds);
23
- if (muscleGroups.length !== allMuscleGroupIds.length) {
24
- errors.push(`Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${allMuscleGroupIds.length}`);
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 equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
29
- const equipment = await equipmentRepo.get({ _id: newExercise.workoutEquipmentTypeId });
30
- if (!equipment) {
31
- errors.push(`Equipment type with ID ${newExercise.workoutEquipmentTypeId} does not exist`);
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
- const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
53
- const muscleGroups = await muscleGroupRepo.getList(allMuscleGroupIds);
54
- if (muscleGroups.length !== allMuscleGroupIds.length) {
55
- errors.push(`Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${allMuscleGroupIds.length}`);
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 equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
61
- const equipment = await equipmentRepo.get({ _id: updatedExercise.workoutEquipmentTypeId });
62
- if (!equipment) {
63
- errors.push(`Equipment type with ID ${updatedExercise.workoutEquipmentTypeId} does not exist`);
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":"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"}
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;AAEtG,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,UAA2B;IAC/E;QACE,KAAK,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;IAES,KAAK,CAAC,8BAA8B,CAC5C,WAA4B,EAC5B,IAA0B;QAE1B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,+BAA+B;QAC/B,MAAM,iBAAiB,GAAG;YACxB,GAAG,WAAW,CAAC,mBAAmB;YAClC,GAAG,WAAW,CAAC,qBAAqB;SACrC,CAAC;QAEF,+BAA+B;QAC/B,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,qDAAqD;YACrD,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,eAAe,GAAG,4BAA4B,CAAC,OAAO,EAAE,CAAC;gBAC/D,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBAC1E,IAAI,YAAY,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;oBACzD,MAAM,CAAC,IAAI,CACT,uCAAuC,YAAY,CAAC,MAAM,eAAe,qBAAqB,CAAC,MAAM,EAAE,CACxG,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,sBAAsB,GAAG,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAEvF,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,8BAA8B,CAAC,OAAO,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,0BAA0B,WAAW,CAAC,sBAAsB,iBAAiB,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAES,KAAK,CAAC,iCAAiC,CAC/C,eAAyC,EACzC,IAA0B;QAE1B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;QAED,gDAAgD;QAChD,MAAM,iBAAiB,GAAW,EAAE,CAAC;QACrC,IAAI,eAAe,CAAC,mBAAmB,EAAE,CAAC;YACxC,iBAAiB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,eAAe,CAAC,qBAAqB,EAAE,CAAC;YAC1C,iBAAiB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;QACnE,CAAC;QAED,0CAA0C;QAC1C,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,qDAAqD;YACrD,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,eAAe,GAAG,4BAA4B,CAAC,OAAO,EAAE,CAAC;gBAC/D,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBAC1E,IAAI,YAAY,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;oBACzD,MAAM,CAAC,IAAI,CACT,uCAAuC,YAAY,CAAC,MAAM,eAAe,qBAAqB,CAAC,MAAM,EAAE,CACxG,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,eAAe,CAAC,sBAAsB,EAAE,CAAC;YAC3C,MAAM,sBAAsB,GAAG,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;YAE3F,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,MAAM,aAAa,GAAG,8BAA8B,CAAC,OAAO,EAAE,CAAC;gBAC/D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,sBAAsB,EAAE,CAAC,CAAC;gBAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CACT,0BAA0B,eAAe,CAAC,sBAAsB,iBAAiB,CAClF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAe;QAC1C,MAAM,YAAY,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;QACpE,MAAM,mBAAmB,GAAG,MAAM,8BAA8B,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;QAC7F,MAAM,iBAAiB,GAAG,MAAM,4BAA4B,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;QAEzF,MAAM,IAAI,CAAC,kCAAkC,CAAC;YAC5C,MAAM;YACN,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,CAAC,QAAyB,EAAE,EAAE;gBAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,6BAA6B,QAAQ,CAAC,GAAG,gCAAgC,CAC1E,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,oBAAoB,EAAE,CAAC,QAAyB,EAAE,EAAE;gBAClD,MAAM,UAAU,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAa,EAAE,CAAC;gBAE5B,uBAAuB;gBACvB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,2BAA2B,QAAQ,CAAC,sBAAsB,kBAAkB,CAAC,CAAC;gBAC5F,CAAC;gBAED,8BAA8B;gBAC9B,MAAM,0BAA0B,GAAG,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CACpE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAC/B,CAAC;gBACF,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,MAAM,CAAC,IAAI,CAAC,kCAAkC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACvF,UAAU,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAClE,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAC9B,CAAC;gBACJ,CAAC;gBAED,gCAAgC;gBAChC,MAAM,4BAA4B,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CACxE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAC/B,CAAC;gBACF,IAAI,4BAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,MAAM,CAAC,IAAI,CACT,oCAAoC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;oBACF,UAAU,CAAC,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CACtE,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAC9B,CAAC;gBACJ,CAAC;gBAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAChC,CAAC;YACD,gBAAgB,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;gBACjD,MAAM,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC;YACD,cAAc,EAAE,KAAK,EAAE,YAA+B,EAAE,EAAE;gBACxD,MAAM,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC9C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -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(newExercise: WorkoutExercise): Promise<void> {
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
- const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
28
- const muscleGroups = await muscleGroupRepo.getList(allMuscleGroupIds);
29
- if (muscleGroups.length !== allMuscleGroupIds.length) {
30
- errors.push(
31
- `Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${allMuscleGroupIds.length}`
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 equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
38
- const equipment = await equipmentRepo.get({ _id: newExercise.workoutEquipmentTypeId });
39
- if (!equipment) {
40
- errors.push(`Equipment type with ID ${newExercise.workoutEquipmentTypeId} does not exist`);
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
- const muscleGroupRepo = WorkoutMuscleGroupRepository.getRepo();
69
- const muscleGroups = await muscleGroupRepo.getList(allMuscleGroupIds);
70
- if (muscleGroups.length !== allMuscleGroupIds.length) {
71
- errors.push(
72
- `Not all muscle groups exist. Found: ${muscleGroups.length}, expected: ${allMuscleGroupIds.length}`
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 equipmentRepo = WorkoutEquipmentTypeRepository.getRepo();
80
- const equipment = await equipmentRepo.get({ _id: updatedExercise.workoutEquipmentTypeId });
81
- if (!equipment) {
82
- errors.push(
83
- `Equipment type with ID ${updatedExercise.workoutEquipmentTypeId} does not exist`
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,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzD,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"}
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;QACtC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAES,iCAAiC,CACzC,gBAA2C;QAE3C,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;YAC1B,UAAU,CAAC,UAAU,CAAC,6CAA6C,EAAE,gBAAgB,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAe;QAC1C,MAAM,aAAa,GAAG,0BAA0B,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;QACpE,MAAM,iBAAiB,GACrB,MAAM,oCAAoC,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC;QAEzE,MAAM,IAAI,CAAC,kCAAkC,CAAC;YAC5C,MAAM;YACN,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,aAAa;YACtB,YAAY,EAAE,CAAC,SAA2B,EAAE,EAAE;gBAC5C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,8BAA8B,SAAS,CAAC,GAAG,gCAAgC,CAC5E,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,oBAAoB,EAAE,CAAC,SAA2B,EAAE,EAAE;gBACpD,MAAM,UAAU,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAa,EAAE,CAAC;gBAE5B,6BAA6B;gBAC7B,MAAM,mBAAmB,GAAG,SAAS,CAAC,mBAAmB,CAAC,MAAM,CAC9D,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAC/B,CAAC;gBACF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,iCAAiC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/E,UAAU,CAAC,mBAAmB,GAAG,SAAS,CAAC,mBAAmB,CAAC,MAAM,CACnE,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAC9B,CAAC;gBACJ,CAAC;gBAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAChC,CAAC;YACD,gBAAgB,EAAE,KAAK,EAAE,cAAsB,EAAE,EAAE;gBACjD,MAAM,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACjD,CAAC;YACD,cAAc,EAAE,KAAK,EAAE,YAAgC,EAAE,EAAE;gBACzD,MAAM,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
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>): Promise<void>;
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,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;cAc/E,iCAAiC,CAC/C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC;IAqBV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAuC7D"}
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 mesocycleRepo = WorkoutMesocycleRepository.getRepo();
15
- const mesocycle = await mesocycleRepo.get({ _id: newMicrocycle.workoutMesocycleId });
16
- if (!mesocycle) {
17
- ErrorUtils.throwError(`Mesocycle with ID ${newMicrocycle.workoutMesocycleId} does not exist`, newMicrocycle);
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 mesocycleRepo = WorkoutMesocycleRepository.getRepo();
29
- const mesocycle = await mesocycleRepo.get({ _id: updatedMicrocycle.workoutMesocycleId });
30
- if (!mesocycle) {
31
- errors.push(`Mesocycle with ID ${updatedMicrocycle.workoutMesocycleId} does not exist`);
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":"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"}
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(newMicrocycle: WorkoutMicrocycle): Promise<void> {
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 mesocycleRepo = WorkoutMesocycleRepository.getRepo();
19
- const mesocycle = await mesocycleRepo.get({ _id: newMicrocycle.workoutMesocycleId });
20
- if (!mesocycle) {
21
- ErrorUtils.throwError(
22
- `Mesocycle with ID ${newMicrocycle.workoutMesocycleId} does not exist`,
23
- newMicrocycle
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 mesocycleRepo = WorkoutMesocycleRepository.getRepo();
41
- const mesocycle = await mesocycleRepo.get({ _id: updatedMicrocycle.workoutMesocycleId });
42
- if (!mesocycle) {
43
- errors.push(`Mesocycle with ID ${updatedMicrocycle.workoutMesocycleId} does not exist`);
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>): Promise<void>;
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,GACzC,OAAO,CAAC,IAAI,CAAC;cAsBA,iCAAiC,CAC/C,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACtD,OAAO,CAAC,IAAI,CAAC;IA8BV,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA6C7D"}
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"}