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