//[Authorize] // delete default assignment, request should have argument // in querystring or api should return no data public IActionResult DisplayUserMetrics(int days = 7) { // Assume the user is not authorized IActionResult result = Unauthorized(); //testing - set userName to User.Identity.Name for deployment string userName = String.IsNullOrEmpty(User.Identity.Name) ? "pleshekc" : User.Identity.Name; try { var visits = (List <VisitItem>)_db.GetVisitsByUserDateRange(userName, DateTime.UtcNow.AddDays(days * -1), DateTime.UtcNow); MetricsViewModel vm = new MetricsViewModel(); var uvm = _db.GetUserVisitMetrics(userName, days); VisitMetricsDTO uvmDTO = new VisitMetricsDTO() { AvgDuration = uvm.AvgDuration, CountVisits = uvm.CountVisits, SumDuration = uvm.SumDuration }; vm.AvgDuration = uvmDTO.AvgDuration; // Top Five Machines should be refactored for the same // dange range as the call to this action vm.TopFiveWorkouts = _db.TopFiveMachines(userName); visits.ForEach(visit => { VisitMetricsItem vmi = new VisitMetricsItem(); vmi.Workouts = _db.WorkoutsPerVisit(visit); vmi.Date = visit.CheckIn.Date; if (vmi.Workouts.Count > 0) { vmi.SumOfDuration = vmi.Workouts .Select(x => x.Duration).Sum(); } vm.WeeklyWorkouts.Add(vmi); }); result = Ok(vm); } catch (Exception) { result = BadRequest(new { Message = "Get workout failed." }); } return(result); }
//[Authorize] public IActionResult DisplayUserMetrics(string userName, int days = 7) { // Assume the user is not authorized IActionResult result = Unauthorized(); try { var visits = (List <VisitItem>)_db.GetVisitsByUserDateRange(userName, DateTime.UtcNow.AddDays(days * -1), DateTime.UtcNow); MetricsViewModel vm = new MetricsViewModel(); var uvm = _db.GetUserVisitMetrics(userName, days); VisitMetricsDTO uvmDTO = new VisitMetricsDTO() { AvgDuration = uvm.AvgDuration, CountVisits = uvm.CountVisits, SumDuration = uvm.SumDuration }; vm.AvgDuration = uvmDTO.AvgDuration; vm.TopFiveWorkouts = _db.TopFiveMachines(userName); visits.ForEach(visit => { VisitMetricsItem vmi = new VisitMetricsItem(); vmi.Workouts = _db.WorkoutsPerVisit(visit); vmi.Date = visit.CheckIn.Date; if (vmi.Workouts.Count > 0) { vmi.SumOfDuration = vmi.Workouts .Select(x => x.Duration).Sum(); } vm.WeeklyWorkouts.Add(vmi); }); // vm.WeeklyWorkouts // .Select(w => w.SumOfDuration = w.Workouts.Sum(x => x.Duration)); //IList<VisitItem> visits = _db.GetVisitsByUserDateRange(userName, // DateTime.UtcNow.AddDays(days * -1), DateTime.UtcNow); //MetricsViewModel vm = new MetricsViewModel(); //// vm.averageTime = _db.GetAvgTimeSpent(userName, days); //var uvm = _db.GetUserVisitMetrics(userName, days); //VisitMetricsDTO uvmDTO = new VisitMetricsDTO() //{ // AvgDuration = uvm.AvgDuration, // CountVisits = uvm.CountVisits, // SumDuration = uvm.SumDuration //}; //vm.AvgDuration = uvmDTO.AvgDuration; //vm.TopFiveWorkouts = _db.TopFiveMachines(userName); //foreach (var v in visits) //{ // IList<WorkoutModel> workoutsInVisit = new List<WorkoutModel>(); // VisitMetricsItem vmi = new VisitMetricsItem(); // workoutsInVisit = _db.WorkoutsPerVisit(v); // vmi.Workouts = workoutsInVisit; // vmi.Date = v.CheckIn.Date; // vm.WeeklyWorkouts.Add(vmi); //} //foreach (var v in vm.WeeklyWorkouts) //{ // foreach (var v2 in v.Workouts) // { // v.SumOfDuration += v2.Duration; // } //} result = Ok(vm); } catch (Exception) { result = BadRequest(new { Message = "Get workout failed." }); } return(result); }