Exemplo n.º 1
0
        public SetViewModel(PreviousSetResult previousWorkoutSetResult)
        {
            if (previousWorkoutSetResult.WorkoutSetResult == null)
            {
                return;
            }

            PreviousWorkoutSetResult = previousWorkoutSetResult;

            Weight        = previousWorkoutSetResult.WorkoutSetResult.Weight == null ? 0 : (int)previousWorkoutSetResult.WorkoutSetResult.Weight;
            RepsCompleted = previousWorkoutSetResult.WorkoutSetResult.RepsCompleted == null ? 0 : (int)previousWorkoutSetResult.WorkoutSetResult.RepsCompleted;
            Difficulty    = previousWorkoutSetResult.WorkoutSetResult.Difficulty == null ? 0 : (Difficulty)previousWorkoutSetResult.WorkoutSetResult.Difficulty;

            switch (previousWorkoutSetResult.WorkoutSetResult.Difficulty)
            {
            case 0:
                PreviousDifficulty = "Easy";
                break;

            case 1:
                PreviousDifficulty = "Easy Medium";
                break;

            case 2:
                PreviousDifficulty = "Medium";
                break;

            case 3:
                PreviousDifficulty = "Medium Difficult";
                break;

            case 4:
                PreviousDifficulty = "Difficult";
                break;
            }
        }
Exemplo n.º 2
0
        public ActionResult StartSet([FromRoute] int workoutId, int workoutSetId, bool lastSet, int currentExerciseId, int workoutSessionId)
        {
            //check if session is active
            //if so, get workoutid, workoutsetid, lastset, current

            int exerciseId = 0;

            Exercise exercise = null;

            List <WorkoutToExercise> wtes = _context.WorkoutToExercise
                                            .Where(we => we.WorkoutId == workoutId && we.Active)
                                            .OrderBy(wte => wte.Order).ToList();

            List <Exercise> exercises = _context.Exercise
                                        .Where(e => wtes.Select(wte => wte.ExerciseId)
                                               .Contains(e.ExerciseId)).ToList();

            //get last session
            WorkoutSession lastWorkoutSession = null;

            WorkoutSet currentWorkoutSet = null;

            WorkoutSet nextWorkoutSet = null;

            List <WorkoutSet> workoutSets = null;

            bool needToGetCurrentSessionInfo = false;

            if (workoutSessionId == 0)
            {
                lastWorkoutSession = _context.WorkoutSession.Where(ws => (DateTime.Now - ws.DateCreated).TotalHours < 1).FirstOrDefault();

                if (lastWorkoutSession != null)
                {
                    needToGetCurrentSessionInfo = true;
                }
            }

            List <WorkoutSetResult> workoutSetResults = null;

            if (lastWorkoutSession != null)
            {
                workoutSetResults = _context.WorkoutSetResult.Where(wsr => wsr.WorkoutSessionId == lastWorkoutSession.WorkoutSessionId).ToList();
            }


            //need to check if session started with different workout



            //if(workoutSetResults.Where(wsr => wsr.))
            //{

            //}

            if (needToGetCurrentSessionInfo)
            {
                wtes = _context.WorkoutToExercise
                       .Where(we => we.WorkoutId == workoutId && we.Active)
                       .OrderBy(wte => wte.Order).ToList();

                var lastCompletedWorkoutSetResult = workoutSetResults.OrderByDescending(wsr => wsr.WorkoutSetResultId).First();


                workoutSetId = lastCompletedWorkoutSetResult.WorkoutSetId;

                var currentWorkoutSetHere = _context.WorkoutSet
                                            .Where(ws => ws.WorkoutSetId == workoutSetId)
                                            .Single();

                //is lastCompletedWorkoutSetResult the last set?
                currentExerciseId = currentWorkoutSetHere.ExerciseId;

                var workoutSetsHere = _context.WorkoutSet.Where(ws => ws.WorkoutId == workoutId && ws.ExerciseId == currentExerciseId).ToList();


                if (workoutSetsHere.Count == 0) //user has started session, but switched workouts.what if workout edited in middle of session?
                {
                    workoutSetId      = 0;
                    lastSet           = false;
                    currentExerciseId = 0;
                }
                else if (workoutSetsHere.Count == 1)
                {
                    lastSet = true;
                }
                else
                {
                    lastSet = workoutSetsHere.OrderByDescending(wsh => wsh.SetOrder).First().WorkoutSetId == workoutSetId;
                }
            }


            if (workoutSessionId == 0 && lastWorkoutSession != null)
            {
                workoutSessionId = lastWorkoutSession.WorkoutSessionId;
            }

            if (workoutSessionId == 0)
            {
                WorkoutSession workoutSession = new WorkoutSession {
                    DateCreated = DateTime.Now
                };

                _context.WorkoutSession.Add(workoutSession);

                _context.SaveChanges();

                workoutSessionId = workoutSession.WorkoutSessionId;
            }



            bool workoutComplete = false;

            if (workoutSetId == 0) //firstSet
            {
                exerciseId = wtes.First().ExerciseId;
            }
            else if (lastSet) //last set -- need next exercise
            {
                int currentOrder = wtes.Where(wte => wte.ExerciseId == currentExerciseId).First().Order;

                WorkoutToExercise workoutToExercise = wtes.FirstOrDefault(wte => wte.Order > currentOrder);

                if (workoutToExercise == null)
                {
                    workoutComplete = true;
                }
                else
                {
                    exerciseId = workoutToExercise.ExerciseId;//is null posible here?
                }
            }
            else
            {
                exerciseId = currentExerciseId;
            }

            if (workoutComplete)
            {
                return(View("WorkoutComplete"));
            }

            exercise = exercises.Where(e => e.ExerciseId == exerciseId).Single();

            workoutSets = _context.WorkoutSet
                          .Where(ws => ws.WorkoutId == workoutId && ws.ExerciseId == exerciseId && ws.Active)
                          .OrderBy(x => x.SetOrder).ToList();



            bool nextSetIsLast = false;



            SetViewModel setViewModel = null;

            PreviousSetResult previousResult = null;

            if (workoutSetId == 0 || lastSet)
            {
                workoutSetId = workoutSets.Where(ws => ws.ExerciseId == exercise.ExerciseId).OrderBy(ws => ws.SetOrder).First().WorkoutSetId;

                nextWorkoutSet = workoutSets.Where(ws => ws.WorkoutSetId == workoutSetId).First();

                nextSetIsLast = nextWorkoutSet.SetOrder == workoutSets.Select(ws => ws.SetOrder).Max();

                previousResult = GetLastWorkoutSetResult(nextWorkoutSet.WorkoutSetId, workoutSessionId);

                if (previousResult.WorkoutSetResult != null && (DateTime.Now - previousResult.WorkoutSetResult.DateCreated).TotalMinutes < 60)
                {
                    workoutSessionId = previousResult.WorkoutSetResult.WorkoutSessionId;
                }

                setViewModel = new SetViewModel(previousResult);

                setViewModel.Exercise   = exercise;
                setViewModel.WorkoutSet = nextWorkoutSet;
                setViewModel.WorkoutId  = workoutId;
                setViewModel.IsLastSet  = nextSetIsLast;

                ModelState.SetModelValue("workoutSessionId", new ValueProviderResult(new Microsoft.Extensions.Primitives.StringValues(workoutSessionId.ToString()), CultureInfo.InvariantCulture));

                return(View("Set", setViewModel));
            }

            currentWorkoutSet = workoutSets.Where(ws => ws.WorkoutSetId == workoutSetId).First();

            nextWorkoutSet = workoutSets.Where(ws => ws.ExerciseId == exerciseId && ws.SetOrder > currentWorkoutSet.SetOrder).First();

            nextSetIsLast = nextWorkoutSet.SetOrder == workoutSets.Select(ws => ws.SetOrder).Max();

            previousResult = GetLastWorkoutSetResult(nextWorkoutSet.WorkoutSetId, workoutSessionId);

            if (previousResult.WorkoutSetResult != null && (DateTime.Now - previousResult.WorkoutSetResult.DateCreated).TotalMinutes < 60)
            {
                workoutSessionId = previousResult.WorkoutSetResult.WorkoutSessionId;
            }

            setViewModel = new SetViewModel(previousResult);

            setViewModel.Exercise   = exercise;
            setViewModel.WorkoutSet = nextWorkoutSet;
            setViewModel.WorkoutId  = workoutId;
            setViewModel.IsLastSet  = nextSetIsLast;

            ModelState.SetModelValue("workoutSessionId", new ValueProviderResult(new Microsoft.Extensions.Primitives.StringValues(workoutSessionId.ToString()), CultureInfo.InvariantCulture));

            return(View("Set", setViewModel));
        }