public ProductListModel GetProducts(ProductListQueryModel queryModel) { if (queryModel is null) { queryModel = new ProductListQueryModel(); } var productsQuery = Database.Products .Include(p => p.MainProduct) .Active() .MainProducts(); if (queryModel.ActiveOnly) { productsQuery = productsQuery.Active(); } if (queryModel.AvailableOnly) { productsQuery = productsQuery.Available(); } if (!string.IsNullOrWhiteSpace(queryModel.Query)) { productsQuery = productsQuery .Where(p => p.Name.Contains(queryModel.Query) || p.Description.Contains(queryModel.Query) || p.EanCode.Contains(queryModel.Query) || p.Sku.Contains(queryModel.Query)); } int skip = (queryModel.Page - 1) * queryModel.Size; int total = productsQuery.Count(); var items = productsQuery .OrderBy(p => p.Name) .OrderBy(p => p.EanCode) .OrderBy(p => p.Sku) .Select(p => new ProductListModel.ListItem { Id = p.Id, Deleted = p.Deleted, EanCode = p.EanCode, IsOnSale = p.IsOnSale, Name = p.Name, OnSaleFrom = p.OnSaleFrom, OnSaleTo = p.OnSaleTo, Price = p.Price, Sku = p.Sku, UnitInStock = p.UnitInStock }).Skip(skip).Take(queryModel.Size).ToArray(); double pages = total / queryModel.Page; var model = new ProductListModel { Total = total, CurrentPage = pages == 0 ? 0 : queryModel.Page, TotalPages = Convert.ToInt32(Math.Ceiling(pages)), Items = items }; return(model); }
public async Task <ProductListModel> GetProducts(ProductListQueryModel queryModel) { var url = UrlBuilder.ProductsListUrl(queryModel); var products = await Client.GetFromJsonAsync <ProductListModel>(url); return(products); }
public IActionResult Get([FromQuery] ProductListQueryModel queryModel = null) { var model = ControllerServices.GetProducts(queryModel); _logger.LogInformation("Found {itemsNumber} products of {itemsTotal}", model.Items.Count(), model.Total); return(Ok(model)); }
async Task ApplyProductsFilter(ProductListQueryModel model) { queryModel.ActiveOnly = model.ActiveOnly; queryModel.AvailableOnly = model.AvailableOnly; queryModel.Query = model.Query; await LoadProducts(queryModel); }
private async Task LoadProducts(ProductListQueryModel queryModel = null) { loading = true; try { products = await Client.GetProducts(queryModel); } finally { StateHasChanged(); loading = false; } }
public string ProductsListUrl(ProductListQueryModel queryModel) { var url = $"{ApiPrefix}/{ResourceName}"; if (queryModel != null) { url = $"{url}?activeOnly={queryModel.ActiveOnly}&page={queryModel.Page}&size={queryModel.Size}&availableOnly={queryModel.AvailableOnly}"; if (!string.IsNullOrWhiteSpace(queryModel.Query)) { url = $"{url}&query={HttpUtility.UrlEncode(queryModel.Query)}"; } } return(url); }
async Task ClearFilters() { Model = new ProductListQueryModel(); await OnProductsFiltered.InvokeAsync(Model); }
public Products() { queryModel = new ProductListQueryModel(); loading = false; }