Example #1
0
        private List <AnalyticsItem> GetExerciseProgress()
        {
            List <AnalyticsItem> exerciseProgress = _userExercises.GroupBy(e => e.Definition).Select(g =>
            {
                ExerciseDefinition def = _userExerciseDefinitions.FirstOrDefault(d => d.Id == g.First().Definition);
                Exercise firstExercise = _userExercises.FirstOrDefault(ex => ex.Id == def.History?.FirstOrDefault());

                var total            = g.Sum(t => (double)t.NetValue);
                var numberOfSessions = g.Count();

                double progressPercent = 0.0;
                if (firstExercise != null)
                {
                    double initialNetValue = ExerciseUtilities.GetNetExerciseValue(firstExercise);

                    // Progress percent = average net value - initial net value
                    progressPercent = (total / numberOfSessions) - initialNetValue;
                }
                return(new AnalyticsItem
                {
                    Marker = def.Title,
                    Count = progressPercent,
                });
            }).OrderByDescending(a => a.Count).ToList();

            return(exerciseProgress);
        }
Example #2
0
        private double GetLatestExerciseImprovement(Exercise newExercise, Exercise lastExercise)
        {
            var newNetValue  = ExerciseUtilities.GetNetExerciseValue(newExercise);
            var lastNetValue = ExerciseUtilities.GetNetExerciseValue(lastExercise);

            var min   = Math.Min(newNetValue, lastNetValue);
            var max   = Math.Max(newNetValue, lastNetValue);
            var delta = max - min;

            // Get a percentage of deviation based on average net value
            var improvement = (delta / max) * 100;

            // If most recent value is less than average, this is a negative correlation
            if (lastNetValue > newNetValue)
            {
                improvement *= -1;
            }

            return(Math.Round(improvement));
        }