public IHttpActionResult ListItemsSearch([ModelBinder(typeof(ListEntrySearchCriteriaBinder))]webModel.ListEntrySearchCriteria criteria) { var searchCriteria = criteria.ToCoreModel(); ApplyRestrictionsForCurrentUser(searchCriteria); var serviceResult = _searchService.Search(searchCriteria); var retVal = new webModel.ListEntrySearchResult(); var start = criteria.Start; var count = criteria.Count; // all categories var categories = serviceResult.Categories.Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))).ToList(); var products = serviceResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount = categories.Count() + serviceResult.ProductsTotalCount; retVal.ListEntries.AddRange(categories.Skip(start).Take(count)); count -= categories.Count(); retVal.ListEntries.AddRange(products.Take(count)); return Ok(retVal); }
public IHttpActionResult ListItemsSearch([ModelBinder(typeof(ListEntrySearchCriteriaBinder))] webModel.ListEntrySearchCriteria criteria) { var searchCriteria = criteria.ToCoreModel(); ApplyRestrictionsForCurrentUser(searchCriteria); var serviceResult = _searchService.Search(searchCriteria); var retVal = new webModel.ListEntrySearchResult(); var start = criteria.Start; var count = criteria.Count; // all categories var categories = serviceResult.Categories.Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))).ToList(); var products = serviceResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount = categories.Count() + serviceResult.ProductsTotalCount; retVal.ListEntries.AddRange(categories.Skip(start).Take(count)); count -= categories.Count(); retVal.ListEntries.AddRange(products.Take(count)); return(Ok(retVal)); }
public IHttpActionResult ListItemsSearch(coreModel.SearchCriteria searchCriteria) { ApplyRestrictionsForCurrentUser(searchCriteria); searchCriteria.WithHidden = true; //Need search in children categories if user specify keyword if (!string.IsNullOrEmpty(searchCriteria.Keyword)) { searchCriteria.SearchInChildren = true; searchCriteria.SearchInVariations = true; } var serviceResult = _searchService.Search(searchCriteria); var retVal = new webModel.ListEntrySearchResult(); var start = searchCriteria.Skip; var count = searchCriteria.Take; // all categories var categories = serviceResult.Categories.Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))).ToList(); var products = serviceResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount = categories.Count() + serviceResult.ProductsTotalCount; retVal.ListEntries.AddRange(categories.Skip(start).Take(count)); count -= categories.Count(); retVal.ListEntries.AddRange(products.Take(count)); return(Ok(retVal)); }
public IHttpActionResult ListItemsSearch(webModel.SearchCriteria criteria) { var coreModelCriteria = criteria.ToCoreModel(); ApplyRestrictionsForCurrentUser(coreModelCriteria); coreModelCriteria.WithHidden = true; //Need search in children categories if user specify keyword if (!string.IsNullOrEmpty(coreModelCriteria.Keyword)) { coreModelCriteria.SearchInChildren = true; coreModelCriteria.SearchInVariations = true; } var retVal = new webModel.ListEntrySearchResult(); int categorySkip = 0; int categoryTake = 0; //Because products and categories represent in search result as two separated collections for handle paging request //we should join two resulting collection artificially //search categories if ((coreModelCriteria.ResponseGroup & coreModel.SearchResponseGroup.WithCategories) == coreModel.SearchResponseGroup.WithCategories) { coreModelCriteria.ResponseGroup = coreModelCriteria.ResponseGroup & ~coreModel.SearchResponseGroup.WithProducts; var categoriesSearchResult = _searchService.Search(coreModelCriteria); var categoriesTotalCount = categoriesSearchResult.Categories.Count(); categorySkip = Math.Min(categoriesTotalCount, coreModelCriteria.Skip); categoryTake = Math.Min(coreModelCriteria.Take, Math.Max(0, categoriesTotalCount - coreModelCriteria.Skip)); var categories = categoriesSearchResult.Categories.Skip(categorySkip).Take(categoryTake).Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))).ToList(); retVal.TotalCount = categoriesTotalCount; retVal.ListEntries.AddRange(categories); coreModelCriteria.ResponseGroup = coreModelCriteria.ResponseGroup | coreModel.SearchResponseGroup.WithProducts; } //search products if ((coreModelCriteria.ResponseGroup & coreModel.SearchResponseGroup.WithProducts) == coreModel.SearchResponseGroup.WithProducts) { coreModelCriteria.ResponseGroup = coreModelCriteria.ResponseGroup & ~coreModel.SearchResponseGroup.WithCategories; coreModelCriteria.Skip = coreModelCriteria.Skip - categorySkip; coreModelCriteria.Take = coreModelCriteria.Take - categoryTake; var productsSearchResult = _searchService.Search(coreModelCriteria); var products = productsSearchResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount += productsSearchResult.ProductsTotalCount; retVal.ListEntries.AddRange(products); } return(Ok(retVal)); }
public IHttpActionResult ListItemsSearch(coreModel.SearchCriteria searchCriteria) { ApplyRestrictionsForCurrentUser(searchCriteria); searchCriteria.WithHidden = true; //Need search in children categories if user specify keyword if (!string.IsNullOrEmpty(searchCriteria.Keyword)) { searchCriteria.SearchInChildren = true; searchCriteria.SearchInVariations = true; } var retVal = new webModel.ListEntrySearchResult(); int categorySkip = 0; int categoryTake = 0; //Because products and categories represent in search result as two separated collections for handle paging request //we should join two resulting collection artificially //search categories if ((searchCriteria.ResponseGroup & coreModel.SearchResponseGroup.WithCategories) == coreModel.SearchResponseGroup.WithCategories) { searchCriteria.ResponseGroup = searchCriteria.ResponseGroup & ~coreModel.SearchResponseGroup.WithProducts; var categoriesSearchResult = _searchService.Search(searchCriteria); var categoriesTotalCount = categoriesSearchResult.Categories.Count(); categorySkip = Math.Min(categoriesTotalCount, searchCriteria.Skip); categoryTake = Math.Min(searchCriteria.Take, Math.Max(0, categoriesTotalCount - searchCriteria.Skip)); var categories = categoriesSearchResult.Categories.Skip(categorySkip).Take(categoryTake).Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))).ToList(); retVal.TotalCount = categoriesTotalCount; retVal.ListEntries.AddRange(categories); searchCriteria.ResponseGroup = searchCriteria.ResponseGroup | coreModel.SearchResponseGroup.WithProducts; } //search products if ((searchCriteria.ResponseGroup & coreModel.SearchResponseGroup.WithProducts) == coreModel.SearchResponseGroup.WithProducts) { searchCriteria.ResponseGroup = searchCriteria.ResponseGroup & ~coreModel.SearchResponseGroup.WithCategories; searchCriteria.Skip = searchCriteria.Skip - categorySkip; searchCriteria.Take = searchCriteria.Take - categoryTake; var productsSearchResult = _searchService.Search(searchCriteria); var products = productsSearchResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount += productsSearchResult.ProductsTotalCount; retVal.ListEntries.AddRange(products); } return Ok(retVal); }
public IHttpActionResult ListItemsSearch([ModelBinder(typeof(ListEntrySearchCriteriaBinder))]webModel.ListEntrySearchCriteria criteria) { //Filter search criteria to the corresponding user permissions var searchCriteria = base.ChangeCriteriaToCurentUserPermissions(criteria.ToModuleModel()); var serviceResult = _searchService.Search(searchCriteria); var retVal = new webModel.ListEntrySearchResult(); var start = criteria.Start; var count = criteria.Count; // all categories var categories = serviceResult.Categories.Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))); var products = serviceResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount = categories.Count() + serviceResult.TotalCount; retVal.ListEntries.AddRange(categories.Skip(start).Take(count)); count -= categories.Count(); retVal.ListEntries.AddRange(products.Take(count)); return Ok(retVal); }
public IHttpActionResult ListItemsSearch([ModelBinder(typeof(ListEntrySearchCriteriaBinder))] webModel.ListEntrySearchCriteria criteria) { //Filter search criteria to the corresponding user permissions var searchCriteria = base.ChangeCriteriaToCurentUserPermissions(criteria.ToModuleModel()); var serviceResult = _searchService.Search(searchCriteria); var retVal = new webModel.ListEntrySearchResult(); var start = criteria.Start; var count = criteria.Count; // all categories var categories = serviceResult.Categories.Select(x => new webModel.ListEntryCategory(x.ToWebModel(_blobUrlResolver))); var products = serviceResult.Products.Select(x => new webModel.ListEntryProduct(x.ToWebModel(_blobUrlResolver))); retVal.TotalCount = categories.Count() + serviceResult.TotalCount; retVal.ListEntries.AddRange(categories.Skip(start).Take(count)); count -= categories.Count(); retVal.ListEntries.AddRange(products.Take(count)); return(Ok(retVal)); }