public async Task <ActionResult <WorkoutOutputModel> > Edit(WorkoutEditModel model) { var result = await workoutService.Edit(model); if (result == null) { return(BadRequest()); } return(result); }
public async Task <WorkoutOutputModel> Edit(WorkoutEditModel model) { var workout = await db.Workouts .FirstOrDefaultAsync(w => w.Id == model.Id && w.IsDeleted == false); if (workout == null) { return(null); } if (model.Description != workout.Description) { workout.Description = model.Description; } if (model.Name != workout.Name) { workout.Name = model.Name; } if (model.WorkoutTypeId != workout.WorkoutTypeId) { workout.WorkoutTypeId = model.WorkoutTypeId; } var excerciseWorkouts = await db.ExcerciseWorkouts .Where(ew => ew.WorkoutId == workout.Id && ew.IsDeleted == false) .ToListAsync(); foreach (var exWo in model.ExcerciseWorkouts) { var currentExcerciseWorkout = excerciseWorkouts .FirstOrDefault(x => x.ExcerciseId == exWo.ExcerciseId); if (currentExcerciseWorkout == null) { workout.ExcerciseWorkouts.Add( new ExcerciseWorkout { ExcerciseId = exWo.ExcerciseId, ExecutionOrder = exWo.ExecutionOrder, Repetitions = exWo.Repetitions }); } else { if (exWo.Repetitions != currentExcerciseWorkout.Repetitions) { currentExcerciseWorkout.Repetitions = exWo.Repetitions; } if (exWo.ExecutionOrder != currentExcerciseWorkout.ExecutionOrder) { currentExcerciseWorkout.ExecutionOrder = exWo.ExecutionOrder; } } } var exWoToRemove = excerciseWorkouts .Where(x1 => !model.ExcerciseWorkouts.Any(x2 => x2.ExcerciseId == x1.ExcerciseId)) .ToList(); db.ExcerciseWorkouts.RemoveRange(exWoToRemove); var result = await db.SaveChangesAsync(); if (result == 0) { return(null); } return(mapper.Map <WorkoutOutputModel>(workout)); }