private IMongoQuery QueryFilters(FiltersCategories filters) { if (filters == null) { return(Query.And(Query.Empty)); } var list = new List <IMongoQuery>(); if (filters.HasValidProducts) { list.Add(Query <Category> .In(x => x.Id, BlProducts.GetProducts(new FiltersProducts { Status = ProductStatus.Valid }).Select(x => x.CategoryId).Distinct())); } if (!string.IsNullOrEmpty(filters.Id)) { list.Add(Query <Category> .EQ(x => x.Id, filters.Id)); } if (!string.IsNullOrEmpty(filters.Name)) { list.Add(Query <Category> .Matches(x => x.Name, $"(?i).*{string.Join(".*", Regex.Split(filters.Name, @"\s+").Select(x => Regex.Escape(x)))}.*")); } if (!list.Any()) { return(Query.And(Query.Empty)); } return(Query.And(list)); }
public IEnumerable <ProductCategoryOutput> GetCategories(FiltersCategories filters) { var result = List(filters)?.Select(x => new ProductCategoryOutput { Id = x.Id, Name = x.Name, ImageUrl = GetCategoryimage(x.Id), QuantityProductSold = GetQuantitySoldItem(x.Id), Products = BlProducts.GetProducts(new FiltersProducts { Status = ProductStatus.Valid })?.Count() ?? 0 }); if (filters?.MinItems.HasValue ?? false && filters.MinItems.Value > 0) { result = result.Where(x => x.Products >= filters.MinItems.Value); } if (filters?.MinSoldItems.HasValue ?? false && filters.MinSoldItems.Value > 0) { result = result.Where(x => x.QuantityProductSold >= filters.MinSoldItems.Value); } return(result); }
public IEnumerable <Category> List(FiltersCategories filters) => Collection.Find(QueryFilters(filters));
public IActionResult Categories([FromBody] FiltersCategories filters) => Ok(_blCategoriesList.GetCategories(filters));