public async Task <PagedList <SaleApiModel> > GetAllSales(GetAllSalesQuery query, CancellationToken token) { var queryable = _set.AsNoTracking(); //TODO: BUILD YOUR DIFFERENT QUERIES ON THE IQUERYABLE INSTANCE TO SEARCH FILTER AND ORDER if (query.SearchTerm is null && query.OrderByTerm is null) { var saleQueryable = queryable.Select(s => new SaleApiModel { Id = s.Id, TypeOfPayment = s.ModeOfPayment, SaleDate = s.SaleDate, SalesPerson = s.SalesPerson, GrandTotal = s.GrandTotal, NumberOfItemsSold = s.ItemsSold.Count, TypeOfSale = s.TypeOfSale, ProductsBought = s.ItemsSold.Select(x => new ItemSoldApiModel { Id = x.Id, ItemName = x.ItemName, Price = x.Price, Quantity = x.Quantity, //this should be the quantity bought not the quantity in stock. //ProductCategory = string.Join(",", x.ProductCategories.Select(x => x.Name).ToArray()) }).ToList() }); var result = new PagedList <SaleApiModel>( await saleQueryable.CountAsync(token).ConfigureAwait(false), query.PageNumber, query.PageSize, await saleQueryable.ToListAsync(token).ConfigureAwait(false)); return(result); } var parsedTotal = decimal.Parse(query.SearchTerm !); var parsedDate = DateTimeOffset.Parse(query.SearchTerm !); queryable = queryable.Where(s => s.SalesPerson.Equals(query.SearchTerm) || s.SaleDate.Equals(parsedDate)); queryable = queryable.OrderBy(x => x.SaleDate); //TODO: ALSO FACTOR IN THAT YOUR RESULT MUST BE PAGINATED. var processedResult = await PagedList <SaleApiModel> .CreatePagedListAsync( queryable.Select(x => new SaleApiModel { GrandTotal = x.GrandTotal, Id = x.Id, NumberOfItemsSold = x.ItemsSold.Count, SaleDate = x.SaleDate, SalesPerson = x.SalesPerson, TypeOfPayment = x.ModeOfPayment, TypeOfSale = x.TypeOfSale }), query.PageNumber, query.PageSize, token).ConfigureAwait(false); return(processedResult); }
//GET : /api/Users/GetAllSales public async Task <ActionResult <IEnumerable <object> > > GetAllAsync([FromQuery] BaseSearchRequestModel request) { var getAllSales = new GetAllSalesQuery(_context); return(Ok(await Task.Run(() => getAllSales.GetAllSales(request)))); }
public async Task <ActionResult <PaginatedResponse <SaleApiModel> > > Get([FromQuery] GetAllSalesQuery query) { var result = await _mediator.Send(query).ConfigureAwait(false); return(Ok(result)); }