Exemple #1
0
        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));
        }