public async Task <List <Purchase> > GetPurchasesAsync(string userId, PurchaseParameters purchaseParameters, bool trackChanges) =>
 await FindWithInclude(p => p.UserId.Equals(userId), trackChanges, p => p.Product)
 .FilterPurchases(purchaseParameters.StartDate, purchaseParameters.EndDate)
 .Search(purchaseParameters.SearchTerm)
 .OrderBy(p => p.TotalPrice)
 .Sort(purchaseParameters.OrderBy)
 .ToListAsync();
        public async Task <IActionResult> GetMinimum([FromQuery] PurchaseParameters purchaseParameters)
        {
            var userId = _userManager.FindByNameAsync(User.Identity.Name).Result.Id;

            var minimumPurchases = await _reportManager.GetMinimumPurchase(userId, purchaseParameters);

            return(Ok(minimumPurchases));
        }
        public async Task <IActionResult> Get([FromQuery] PurchaseParameters purchaseParameters)
        {
            var userId = _userManager.FindByNameAsync(User.Identity.Name).Result.Id;

            var purchasesbyCategory = await _reportManager.GetPurchasesByCategory(userId, purchaseParameters);

            return(Ok(purchasesbyCategory));
        }
Example #4
0
        public async Task <IActionResult> GetPurchasesForUser([FromQuery] PurchaseParameters purchaseParameters)
        {
            var userId = _manager.FindByNameAsync(User.Identity.Name).Result.Id;

            if (!purchaseParameters.ValidDateRange)
            {
                return(BadRequest("End Date can't be less than Start Date."));
            }

            var purchasesFromDb = await _repository.Purchase.GetPurchasesAsync(userId, purchaseParameters, trackChanges : false);

            var purchasesDto = _mapper.Map <IEnumerable <PurchaseDto> >(purchasesFromDb);

            return(Ok(purchasesDto));
        }
Example #5
0
        public async Task <IEnumerable <ReportDto> > GetPurchasesByCategory(string userId, PurchaseParameters purchaseParameters)
        {
            List <Purchase> purchases = await _repository.Purchase.GetPurchasesAsync(userId, purchaseParameters, trackChanges : false);

            var categories = await _repository.Category.GetAllCategoriesAsync(trackChanges : false);

            var categoriesDto = _mapper.Map <IEnumerable <CategoryDto> >(categories);

            var joinedPurchases = purchases.Join(categoriesDto,
                                                 p => p.Product.CategoryId,
                                                 c => c.Id,
                                                 (purchase, category) => new { purchase.TotalPrice, category });

            var reportResult = joinedPurchases.GroupBy(j => j.category)
                               .Select(g => new ReportDto
            {
                Category   = g.Key,
                TotalPrice = g.Sum(c => c.TotalPrice)
            });

            return(reportResult);
        }
Example #6
0
        public async Task <IEnumerable <ReportDto> > GetMinimumPurchase(string userId, PurchaseParameters purchaseParameters)
        {
            var purchasesByCategory = await GetPurchasesByCategory(userId, purchaseParameters);

            _logger.LogInfo("Getting minimum purchases");

            var minimumPurchases = purchasesByCategory
                                   .OrderBy(x => x.TotalPrice)
                                   .Select(r => new ReportDto
            {
                Category   = r.Category,
                TotalPrice = r.TotalPrice
            })
                                   .Take(NUMBER_TO_TAKE);

            return(minimumPurchases);
        }