Beispiel #1
0
        public async Task <ActionResult <List <ProductViewModel> > > GetProducts(int?page = null, int?limit = null, string name = null, string color = null, string size = null)
        {
            var user = await _userRepo.GetByLogin(User.Identity.Name);

            var products = await _service.GetProducts(user);

            if (products == null || !products.Any())
            {
                var m = new FilteredProductViewModel {
                    Products = new List <ProductViewModel>()
                };
                return(Ok(m));
            }

            // переделать на регулярное выражение
            string pattern = "\\b" + name + "\\S*";    //шаблон, по которому ищутся слова в строке
            var    regex   = new Regex(pattern);

            if (!string.IsNullOrEmpty(name))
            {
                products = products.Where(p => !string.IsNullOrEmpty(p.ProdName) && StartsWithAny(p.ProdName.ToLower(), name.ToLower()));
            }

            if (!string.IsNullOrEmpty(color))
            {
                products = products.Where(p => p != null && !string.IsNullOrEmpty(p.Color) && p.Color.ToLower().Contains(color.ToLower()));
            }

            if (!string.IsNullOrEmpty(size))
            {
                products = products.Where(p => p != null && !string.IsNullOrEmpty(p.Size) && p.Size.ToLower().Contains(size));
            }

            if (page == null || limit == null)
            {
                return(Ok(products));
            }

            var items = products.Skip((page.Value - 1) * limit.Value).Take(limit.Value).ToList();

            var prod = new FilteredProductViewModel
            {
                Products             = items,
                PageViewModel        = new PageViewModel(products.Count(), page.Value, limit.Value),
                SelectedProductName  = name,
                SelectedProductColor = color,
                SelectedProductSize  = size
            };

            return(Ok(prod));
        }
Beispiel #2
0
        public async Task <FilteredProductViewModel> GetProducts(int?page = 1, int?limit = 10, string name = null, string color = null, string size = null, int?shopId = null)
        {
            var user = await _userRepo.GetByLogin(User.Identity.Name);

            if (shopId == null)
            {
                var shops = _shopService.GetStocks(user);
                shopId = shops.FirstOrDefault()?.id;
            }
            var stocks = await _service.GetStocks(user, shopId);

            if (stocks == null || !stocks.Any())
            {
                var vm = new FilteredProductViewModel
                {
                    Products      = stocks,
                    PageViewModel = new PageViewModel(1, 1, 0),
                };
                return(vm);
            }
            if (!string.IsNullOrEmpty(name))
            {
                stocks = stocks.Where(p => p.ProdName.Contains(name));
            }

            var items = stocks.Skip((page.Value - 1) * limit.Value).Take(limit.Value).ToList();

            var prod = new FilteredProductViewModel
            {
                Products            = items,
                PageViewModel       = new PageViewModel(stocks.Count(), page.Value, limit.Value),
                SelectedProductName = name,
            };

            return(prod);
        }