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)); }
/// <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 }