private void ValidateExerciseOrder(WorkoutExecutionDTO workoutExecutionDTO)
 {
     if (workoutExecutionDTO.Exercises.Count()
         != workoutExecutionDTO.Exercises.Select(x => x.Order).Distinct().Count())
     {
         throw new Exception("Orders are not distinct");
     }
 }
        private void AddWorkoutPlanToCache(string username, WorkoutExecutionDTO workout)
        {
            var saveWorkouts = _workoutExecutionCacheService.Get(username)?.Value.ToList() ??
                               new List <WorkoutExecutionDTO>();

            saveWorkouts.Add(workout);
            _workoutExecutionCacheService.Put(username, saveWorkouts);
        }
        private void UpdateWorkoutInCache(string username, WorkoutExecutionDTO workout)
        {
            var workouts     = _workoutExecutionCacheService.Get(username).Value;
            var saveWorkouts = workouts.Where(x => x.ExternalId != workout.ExternalId)
                               .ToList();

            saveWorkouts.Add(workout);
            _workoutExecutionCacheService.Put(username, saveWorkouts);
        }
        public async Task AddWorkoutPlanAsync(string username, WorkoutExecutionDTO workout)
        {
            await ValidateWorkout(workout);

            await _userRepository.AddUserIfNotExists(username);

            AddWorkoutPlanToCache(username, workout);
            _backgroundJobClientService.Enqueue <IAddWorkoutExecutionJob>(x => x.Run(username, workout));
        }
        private async Task ValidateFatigue(WorkoutExecutionDTO workoutExecutionDTO)
        {
            var fatigues = await _fatiguesRepository.GetAll();

            if (!fatigues.Any(fatigue => fatigue.Id == workoutExecutionDTO.FatigueId))
            {
                throw new Exception("That fatigue does not exist");
            }
        }
        private async Task ValidateMood(WorkoutExecutionDTO workoutExecutionDTO)
        {
            var moods = await _moodsRepository.GetAll();

            if (!moods.Any(mood => mood.Id == workoutExecutionDTO.MoodId))
            {
                throw new Exception("That mood does not exist");
            }
        }
        private async Task ValidateExercisesNamesAsync(WorkoutExecutionDTO workoutExecutionDTO)
        {
            var exercises = await _exerciseRepository.GetAllExercisesAsync();

            if (!workoutExecutionDTO.Exercises.All(x => exercises.Any(y => y.Id == x.ExerciseId && y.Name == x.ExerciseName)))
            {
                throw new Exception("Invalid Exercises");
            }
            ;
        }
        public async Task UpdateWorkoutPlanAsync(string username, WorkoutExecutionDTO workout)
        {
            await ValidateWorkout(workout);

            if (!await UserWorkoutPlanExistsAsync(username, workout.ExternalId))
            {
                throw new Exception("there is no such workout");
            }
            ;
            UpdateWorkoutInCache(username, workout);
            _backgroundJobClientService.Enqueue <IUpdateWorkoutExecutionJob>(x => x.Run(username, workout));
        }
Example #9
0
 private Task SaveWorkout(Guid workoutExecutionId, string username, WorkoutExecutionDTO workoutExecutionDTO)
 {
     return(_sqlConnection.ExecuteAsync("[Workout].[sp_WorkoutExecutions_Add]", new
     {
         WorkoutName = workoutExecutionDTO.Name,
         workoutExecutionDTO.IsPublic,
         workoutExecutionDTO.Created,
         workoutExecutionDTO.Description,
         workoutExecutionDTO.ExternalId,
         workoutExecutionDTO.FatigueId,
         workoutExecutionDTO.MoodId,
         workoutExecutionDTO.Executed,
         Username = username,
         WorkouExecutionVersionId = workoutExecutionId,
         IsActive = true,
     },
                                        commandType: CommandType.StoredProcedure));
 }
 public async Task Run(string username, WorkoutExecutionDTO workoutExecutionDTO)
 {
     await _commandDispatcher.Dispatch(new AddWorkoutExecutionCommand { Username = username, Workout = workoutExecutionDTO }, default);
 }
 private async Task ValidateExercisesAsync(WorkoutExecutionDTO workoutExecutionDTO)
 {
     ValidateExerciseOrder(workoutExecutionDTO);
     await ValidateExercisesNamesAsync(workoutExecutionDTO);
 }
 private Task ValidateWorkout(WorkoutExecutionDTO workoutExecutionDTO)
 {
     return(Task.WhenAll(ValidateExercisesAsync(workoutExecutionDTO), ValidateFatigue(workoutExecutionDTO), ValidateMood(workoutExecutionDTO)));
 }