public void UpdateFromVM(CompletedWorkoutVM viewModel) { base.UpdateFromVM(viewModel); CompletedRepetitions = GetCompletedRepetitionsFromVM(viewModel.CompletedRepetitions); CompletedDateTime = DateTime.Parse(viewModel.CompletedDateTime); PlannedWorkoutId = viewModel.PlannedWorkoutId; }
private async Task VerifyReferencedPlannedWorkout(CompletedWorkoutVM viewModel, int userId, bool throwIfNoPlannedWorkout) { if (throwIfNoPlannedWorkout && !viewModel.PlannedWorkoutId.HasValue) { throw new RestException(System.Net.HttpStatusCode.BadRequest, "Missing planned workout id."); } else if (!viewModel.PlannedWorkoutId.HasValue) { if (viewModel.CompletedRepetitions.Any(x => x.PlannedRepetitionId.HasValue)) { throw new RestException(System.Net.HttpStatusCode.BadRequest, "Planned repetitions cannot exist if not planned workout exists."); } return; } var plannedWorkout = await _plannedWorkoutRepository.GetNoTracking(viewModel.PlannedWorkoutId.Value); if (plannedWorkout is null || plannedWorkout.UserId != userId) { throw new RestException(System.Net.HttpStatusCode.NotFound, "Planned workout not found."); } if (!VerifyPlannedRepetitionIds(viewModel, plannedWorkout)) { throw new RestException(System.Net.HttpStatusCode.BadRequest, "Not all planned repetitions were found."); } }
public async Task <bool> CompleteUnplannedWorkout(int userId, CompletedWorkoutVM viewModel) { await Extensions.FindUser(userId, _userRepository, _cache); viewModel.PlannedWorkoutId = null; var model = new CompletedWorkout(viewModel, userId, 0); var entriesSaved = await _completedWorkoutRepository.Create(model); return(entriesSaved == (model.CompletedRepetitions.Count + 1)); }
private bool VerifyPlannedRepetitionIds(CompletedWorkoutVM completedWorkout, PlannedWorkout plannedWorkout) { var completedReferencingPlanned = completedWorkout.CompletedRepetitions.Where(x => x.PlannedRepetitionId.HasValue) .Select(x => x.PlannedRepetitionId.Value).Distinct().ToList(); if (completedReferencingPlanned.Count == 0) { return(true); } var plannedRepetitionIds = plannedWorkout.PlannedRepetitions.Select(x => x.Id).ToList(); return(completedReferencingPlanned.Any(x => !plannedRepetitionIds.Contains(x))); }
public async Task <bool?> UpdateCompletedWorkout(int userId, int workoutId, CompletedWorkoutVM viewModel) { await Extensions.FindUser(userId, _userRepository, _cache); var workout = await _completedWorkoutRepository.Get(workoutId); if (workout is null || userId != workout.UserId) { return(null); } await VerifyReferencedPlannedWorkout(viewModel, userId, false); workout.UpdateFromVM(viewModel); return((await _completedWorkoutRepository.Update(workout)) > 0); }
public CompletedWorkout(CompletedWorkoutVM viewModel, int userId, int id) : base(viewModel, userId, id) { CompletedRepetitions = viewModel.CompletedRepetitions?.Select(x => new CompletedRepetition(x, ActivityType, userId, x.Id, id)).ToList(); CompletedDateTime = DateTime.Parse(viewModel.CompletedDateTime); PlannedWorkoutId = viewModel.PlannedWorkoutId; }
public async Task <IActionResult> UpdateWorkout([FromRoute] int userId, [FromRoute] int workoutId, [FromBody] CompletedWorkoutVM updatedWorkout) { var result = await _completedWorkoutService.UpdateCompletedWorkout(userId, workoutId, updatedWorkout); if (result.HasValue) { return(Ok(result)); } return(NotFound()); }
public async Task <IActionResult> CompletePlannedWorkout([FromRoute] int userId, [FromBody] CompletedWorkoutVM workout) { var result = await _completedWorkoutService.CompletePlannedWorkout(userId, workout); return(Ok(result)); }