예제 #1
0
 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);
        }
예제 #6
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));
        }