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