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)); }
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)); }
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); }
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); }