public async Task <IActionResult> EditWorkout(WorkoutViewModel workoutViewModel)
        {
            var user = await GetCurrentUserAsync();

            if (!ModelState.IsValid)
            {
                return(View(workoutViewModel));
            }

            if (workoutViewModel == null)
            {
                return(View("/Error"));
            }

            //Creating new entry
            var newWorkoutEntry = new NewWorkoutEntryDto
            {
                ExerciseId = workoutViewModel.ExerciseId,
                Set        = workoutViewModel.Set,
                Reps       = workoutViewModel.Reps,
                Weight     = workoutViewModel.Weight
            };

            //Adding to DTO
            var dto = new AddWorkoutEntryToWorkoutDto
            {
                WorkoutId        = workoutViewModel.Id,
                UserId           = user.Id,
                WorkoutEntryDtos = new List <NewWorkoutEntryDto>()
            };

            dto.WorkoutEntryDtos.Add(newWorkoutEntry);

            //Post to database
            var result = await _workoutService.AddWorkoutEntryAsync(dto);

            if (result < 1)
            {
                return(View("/Error"));
            }


            //Return to page with added entry
            var workoutToUpdate = await _workoutService.GetWorkoutAsync(workoutViewModel.Id);

            var exercises = await _exerciseService.GetAllExercisesAsync();

            var model = _mapper.Map <WorkoutViewModel>(workoutToUpdate);

            model.Exercises      = exercises.ToList() ?? new List <ExerciseDto>();
            model.WorkoutEntries =
                _mapper.Map <ICollection <WorkoutEntryDto>, IEnumerable <WorkoutEntryViewModel> >(workoutToUpdate
                                                                                                  .WorkoutEntryDtos);

            return(View(model));
        }
示例#2
0
        /// <summary>
        ///     Add workout entry/entries to an existing workout
        /// </summary>
        /// <param name="workoutDto">dto</param>
        /// <returns>if add was successfull</returns>
        public async Task <int> AddWorkoutEntryAsync(AddWorkoutEntryToWorkoutDto workoutDto)
        {
            //Check if user exists
            var user = await _userRepository.GetUser(workoutDto.UserId);

            if (user == null)
            {
                LogNonExistingUserError("AddWorkoutEntryAsync", workoutDto.UserId);
                return(0);
            }

            //Get Workout
            var workout = await _workoutRepository.GetWorkoutWithEntries(workoutDto.WorkoutId);

            //Check if workout exists
            if (workout == null)
            {
                LogError("AddWorkoutEntryAsync", $"Workout with id {workoutDto.WorkoutId} did not exist in database");
                return(0);
            }

            //Convert Entries
            var entries = MakeNewWorkoutPersistantEntries(workoutDto.WorkoutEntryDtos);

            //Add entries to workout
            var counter = 0;

            foreach (var workoutEntry in entries)
            {
                workout.WorkoutEntries.Add(workoutEntry);
                counter = counter + 1;
            }

            //update
            var isSuccess = await _userRepository.UpdateAsync(user);

            //Return number of added entries of 0 if fail
            if (isSuccess)
            {
                LogInformation("AddWorkoutEntryAsync",
                               $"User with id {workoutDto.UserId} has added {counter} entries to workout it id {workoutDto.WorkoutId}");
            }
            else
            {
                LogError("AddWorkoutEntryAsync",
                         $"Failed to add {counter} entries to workout with id {workoutDto.WorkoutId} for user with id {workoutDto.UserId}");
            }
            return(!isSuccess ? 0 : counter);
        }
        public async Task AddWorkoutEntryReturnsTrue()
        {
            //Arrange
            var loggerMock           = new Mock <ILoggerFactory>();
            var userRepoMock         = new Mock <IUserRepository>();
            var workoutRepoMock      = new Mock <IWorkoutRepository>();
            var workoutEntryRepoMock = new Mock <IWorkoutEntryRepository>();
            var exerciseRepoMock     = new Mock <IExerciseRepository>();
            var mockMapper           = new Mock <IMapper>();
            var logger = new Mock <ILogger>();

            loggerMock.Setup(l => l.CreateLogger(It.IsAny <string>())).Returns(logger.Object);


            var exercise = new Exercise
            {
                Id   = 1,
                Name = "Benchpress"
            };

            var workout = new Workout
            {
                Id             = 1,
                CreationDate   = DateTime.Now,
                UserId         = 0,
                WorkoutEntries = new List <WorkoutEntry>()
            };
            var user = new User
            {
                Id       = 1,
                Workouts = new List <Workout> {
                    workout
                }
            };

            var dto = new AddWorkoutEntryToWorkoutDto
            {
                UserId           = 1,
                WorkoutId        = 1,
                WorkoutEntryDtos = new List <NewWorkoutEntryDto>
                {
                    new NewWorkoutEntryDto
                    {
                        ExerciseId = 1,
                        Set        = 1,
                        Reps       = 10,
                        Weight     = 35
                    },
                    new NewWorkoutEntryDto
                    {
                        ExerciseId = 2,
                        Set        = 1,
                        Reps       = 15,
                        Weight     = 70
                    }
                }
            };

            userRepoMock.Setup(r => r.GetUser(It.IsAny <int>())).ReturnsAsync(user);
            workoutRepoMock.Setup(r => r.GetWorkoutWithEntries(It.IsAny <int>())).ReturnsAsync(workout);
            userRepoMock.Setup(r => r.UpdateAsync(It.IsAny <User>())).ReturnsAsync(true);
            exerciseRepoMock.Setup(r => r.FindAsync(It.IsAny <int>())).ReturnsAsync(exercise);
            mockMapper.Setup(m => m.Map <WorkoutEntry>(It.IsAny <WorkoutEntryDto>())).Returns(new WorkoutEntry());


            var SUT = new WorkoutService(loggerMock.Object, mockMapper.Object, userRepoMock.Object,
                                         workoutRepoMock.Object,
                                         exerciseRepoMock.Object, workoutEntryRepoMock.Object);

            //Act
            var result = await SUT.AddWorkoutEntryAsync(dto);

            //Asert
            Assert.True(result == 2); //Two entries are added to the workout
        }