public static FilterDefinition <Product> CreateFilter(this ProductFilterCriteria searchCriteria) { var filters = new List <FilterDefinition <Product> >(); var isActivefilter = Builders <Product> .Filter.Eq(p => p.IsActive, true); filters.Add(isActivefilter); if (!string.IsNullOrWhiteSpace(searchCriteria.SearchTerm)) { var filter = Builders <Product> .Filter.Where(p => p.DisplayName.ToLowerInvariant() .Contains(searchCriteria.SearchTerm.ToLowerInvariant())); filters.Add(filter); } if (!string.IsNullOrWhiteSpace(searchCriteria.Category)) { var filter = Builders <Product> .Filter.Eq(p => p.Category.Code, searchCriteria.Category); filters.Add(filter); } if (!string.IsNullOrWhiteSpace(searchCriteria.Filters)) { var searchFilters = searchCriteria.Filters.Split(','); var filter = Builders <Product> .Filter.Where(p => p.Filters.Any(f => searchFilters.Contains(f.Code))); filters.Add(filter); } var filterCombined = Builders <Product> .Filter.And(filters); return(filterCombined); }
public async Task <IEnumerable <Product> > ReadAsync(ProductFilterCriteria searchCriteria) { var filter = searchCriteria.CreateFilter(); return(await _collection .Find(filter) .Limit(searchCriteria.Limit) .Skip(searchCriteria.Skip) .ToListAsync() .ConfigureAwait(false)); }
public async Task <IActionResult> Get(ProductFilterCriteria productFilter) { var countLimited = productFilter.Limit > 1000 || productFilter.Limit == 0 ? 1000 : productFilter.Limit; productFilter.Limit = countLimited; var products = await _productReader.ReadAsync(productFilter).ConfigureAwait(false); if (!products.Any()) { return(NoContent()); } return(Ok(products)); }