Example #1
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
        async Task ApplyProductsFilter(ProductListQueryModel model)
        {
            queryModel.ActiveOnly    = model.ActiveOnly;
            queryModel.AvailableOnly = model.AvailableOnly;
            queryModel.Query         = model.Query;

            await LoadProducts(queryModel);
        }
Example #5
0
        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);
        }
Example #7
0
 async Task ClearFilters()
 {
     Model = new ProductListQueryModel();
     await OnProductsFiltered.InvokeAsync(Model);
 }
Example #8
0
        public Products()
        {
            queryModel = new ProductListQueryModel();

            loading = false;
        }