public async Task <CustomerFullStatsModel> GetCustomerStats(string email) { CustomerFullStatsModel model = new CustomerFullStatsModel(); var customer = await Context.Users.OfType <Customer>().Where(x => x.Email == email).Include(x => x.Visits.Select(y => y.Service)).FirstOrDefaultAsync(); if (customer == null) { throw new ItemNotFoundException(); } model.Customer = customer; var visitsFromThePast = customer.Visits.Where(x => x.StartDate < DateTime.Now); if (visitsFromThePast.Count() > 0) { model.Stats = new CustomerStatsModel { NumberOfVisits = visitsFromThePast.Count(), LowestCostOfTheVisit = visitsFromThePast.Min(x => x.CostAfterDiscount), HighestCostOfTheVisit = visitsFromThePast.Max(x => x.CostAfterDiscount), AverageCostOfTheVisit = Math.Round(visitsFromThePast.Average(x => x.CostAfterDiscount), 0), }; var service = visitsFromThePast.GroupBy(x => x.Service).OrderByDescending(x => x.Count()).Select(x => x.Key).FirstOrDefault(); model.MostPopularService = service; } return(model); }
public async Task <IHttpActionResult> GetCustomerStats(string email) { CustomerFullStatsModel model = new CustomerFullStatsModel(); try { model = await _unitOfWork.UserRepository.GetCustomerStats(email); } catch (ItemNotFoundException e) { return(NotFound()); } catch (Exception e) { _logger.Error(e); return(InternalServerError()); } var result = _mapper.Map <CustomerStatsApiModel>(model); return(Ok(result)); }