public async Task <IActionResult> GetUserStatistics([FromQuery] string id = null) { try { Expression <Func <Workout, bool> > condition = null; if (id == null) { condition = t => t.User.UserName.Equals(User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value); } else { condition = t => t.User.Id.Equals(id); } var allWorkoutsByUser = await _context.Workouts .Include(s => s.User) .Include(s => s.Template) .AsNoTracking() .Where(condition) .Select(x => new { NumberOfRepetitions = x.NumberOfRepetitions, Muscle = x.Template.MuscleGroup }) .ToListAsync(); var statisticsModel = new UserStatisticsModel(); statisticsModel.TotalWorkouts = allWorkoutsByUser.Count; statisticsModel.TotalRepetitions = allWorkoutsByUser.Sum(x => x.NumberOfRepetitions); statisticsModel.TotalWorkoutsByMuscleGroup = new Dictionary <string, int>(); statisticsModel.TotalRepetitionsByMuscleGroup = new Dictionary <string, int>(); foreach (var workout in allWorkoutsByUser) { if (statisticsModel.TotalWorkoutsByMuscleGroup.ContainsKey(workout.Muscle)) { statisticsModel.TotalWorkoutsByMuscleGroup[workout.Muscle] += 1; } else { statisticsModel.TotalWorkoutsByMuscleGroup.Add(workout.Muscle, 1); } if (statisticsModel.TotalRepetitionsByMuscleGroup.ContainsKey(workout.Muscle)) { statisticsModel.TotalRepetitionsByMuscleGroup[workout.Muscle] += workout.NumberOfRepetitions; } else { statisticsModel.TotalRepetitionsByMuscleGroup.Add(workout.Muscle, workout.NumberOfRepetitions); } } return(Ok(statisticsModel)); }catch (Exception ex) { throw ex; } }
/// <summary> /// /// </summary> /// <returns></returns> public ActionResult Statistics() { var userDB = new ApplicationDbContext(); var model = new UserStatisticsModel { UserCount = userDB.Users.Count(), RegisteredToday = 0, ApprovedToday = 0, LogedInToday = 0, }; foreach (var role in userDB.Roles.ToList()) { model.RoleStatistics.Add(new RoleStatisticsModel { RoleName = role.Name, UserCount = userDB.Users.Count(u => u.Roles.Any(r => r.RoleId.Equals(role.Id))), }); } var timeDB = new TimeTableDbContext(); foreach (var org in timeDB.Organisers.ToList()) { model.OrgStatistics.Add(new OrgStatisticsModel { OrgName = org.Name, UserCount = org.Members.Count(m => !string.IsNullOrEmpty(m.UserId)), AdminCount = org.Members.Count(m => m.IsAdmin), }); } return(View(model)); }