public async Task <CategoryBrowsingViewModel> GetCategoryAvailableProductsAsync(GetBrowseCategoryParam param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } if (ViewModel != null) { return(ViewModel); } ViewModel = await CategoryBrowsingViewService.GetCategoryBrowsingViewModelAsync(new GetCategoryBrowsingViewModelParam { CategoryId = param.CategoryId, CategoryName = await GetCategoryNameAsync(param.CategoryId), BaseUrl = RequestUtils.GetBaseUrl(param.Request).ToString(), IsAllProducts = CategoryMetaContext.GetIsAllProductPage(), Page = param.Page, SortBy = param.SortBy, SortDirection = param.SortDirection, InventoryLocationIds = await InventoryLocationProvider.GetInventoryLocationIdsForSearchAsync(), SelectedFacets = SearchUrlProvider.BuildSelectedFacets(param.Request.QueryString).ToList(), CultureInfo = ComposerContext.CultureInfo, }).ConfigureAwait(false); return(ViewModel); }
public virtual async Task <IHttpActionResult> GetCategoryFacets(GetCategoryFacetsRequest request) { var param = new GetCategoryBrowsingViewModelParam { CategoryId = request.CategoryId, CategoryName = string.Empty, BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(), IsAllProducts = false, NumberOfItemsPerPage = 0, Page = 1, SortBy = "score", SortDirection = "desc", InventoryLocationIds = await InventoryLocationProvider.GetInventoryLocationIdsForSearchAsync().ConfigureAwait(false), CultureInfo = ComposerContext.CultureInfo }; if (!string.IsNullOrEmpty(request.QueryString)) { var queryString = HttpUtility.ParseQueryString(request.QueryString); param.SelectedFacets = SearchUrlProvider.BuildSelectedFacets(queryString).ToList(); } var viewModel = await CategoryBrowsingViewService.GetCategoryBrowsingViewModelAsync(param).ConfigureAwait(false); viewModel.ProductSearchResults.Facets = viewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); return(Ok(viewModel)); }
public virtual async Task <CategoryBrowsingViewModel> GetViewModelAsync() { if (_viewModel != null) { return(_viewModel); } var categoryId = CategoryMetaContext.GetCategoryId(); _viewModel = await CategoryBrowsingViewService.GetCategoryBrowsingViewModelAsync(new GetCategoryBrowsingViewModelParam { CategoryId = categoryId, CategoryName = await GetCategoryNameAsync(categoryId).ConfigureAwait(false), BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(), IsAllProducts = CategoryMetaContext.GetIsAllProductPage(), NumberOfItemsPerPage = SearchConfiguration.MaxItemsPerPage, Page = CurrentPage, SortBy = SortBy, SortDirection = SortDirection, InventoryLocationIds = await InventoryLocationProvider.GetInventoryLocationIdsForSearchAsync().ConfigureAwait(false), SelectedFacets = SearchUrlProvider.BuildSelectedFacets(Request.QueryString).ToList(), CultureInfo = ComposerContext.CultureInfo, }).ConfigureAwait(false); return(_viewModel); }
public virtual async Task <IHttpActionResult> GetSearchResults(GetQueryFacetsRequest request) { var queryString = HttpUtility.ParseQueryString(request.QueryString ?? ""); var SelectedFacets = SearchUrlProvider.BuildSelectedFacets(queryString).ToList(); var CurrentPage = int.TryParse(queryString[SearchRequestParams.Page], out int page) && page > 0 ? page : 1; var SortDirection = queryString[SearchRequestParams.SortDirection] ?? SearchRequestParams.DefaultSortDirection; var SortBy = queryString[SearchRequestParams.SortBy] ?? SearchRequestParams.DefaultSortBy; var BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(); var searchCriteria = await BaseSearchCriteriaProvider.GetSearchCriteriaAsync(null, BaseUrl, true, CurrentPage).ConfigureAwait(false); searchCriteria.SortBy = SortBy; searchCriteria.SortDirection = SortDirection; searchCriteria.SelectedFacets.AddRange(SelectedFacets); var param = new GetSearchQueryViewModelParams { QueryName = request.QueryName, QueryType = request.QueryType, Scope = ComposerContext.Scope, CultureInfo = ComposerContext.CultureInfo, Criteria = searchCriteria, InventoryLocationIds = searchCriteria.InventoryLocationIds }; var viewModel = await SearchQueryViewService.GetSearchQueryViewModelAsync(param).ConfigureAwait(false); viewModel.ProductSearchResults.Facets = viewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); return(Ok(viewModel)); }
public virtual async Task <IHttpActionResult> GetFacets(GetQueryFacetsRequest request) { var queryString = HttpUtility.ParseQueryString(request.QueryString); var criteria = await BaseSearchCriteriaProvider.GetSearchCriteriaAsync(null, RequestUtils.GetBaseUrl(Request).ToString(), true).ConfigureAwait(false); criteria.NumberOfItemsPerPage = 0; criteria.SelectedFacets.AddRange(SearchUrlProvider.BuildSelectedFacets(queryString)); var param = new GetSearchQueryViewModelParams { QueryName = request.QueryName, QueryType = request.QueryType, Scope = ComposerContext.Scope, CultureInfo = ComposerContext.CultureInfo, Criteria = criteria, InventoryLocationIds = criteria.InventoryLocationIds }; var viewModel = await SearchQueryViewService.GetSearchQueryViewModelAsync(param).ConfigureAwait(false); viewModel.ProductSearchResults.Facets = viewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); return(Ok(viewModel)); }
/// <summary> /// Creates the product search results view model. /// </summary> /// <createSearchViewModelParam name="createSearchViewModelParam">The parameter.</createSearchViewModelParam> /// <returns></returns> protected virtual async Task <ProductSearchResultsViewModel> CreateProductSearchResultsViewModelAsync(CreateProductSearchResultsViewModelParam <TParam> param) { //TODO: Implement by calling the ViewModelMapper instead. var searchResultViewModel = new ProductSearchResultsViewModel { SearchResults = new List <ProductSearchViewModel>(), CategoryFacetCounts = BuildCategoryFacetCounts(param), Keywords = param.SearchParam.Criteria.Keywords, TotalCount = param.SearchResult.TotalCount, CorrectedSearchTerms = param.SearchResult.CorrectedSearchTerms, Suggestions = new List <Suggestion>() }; if (param.SearchResult.Suggestions != null) { foreach (var suggestion in param.SearchResult.Suggestions) { var cloneParam = param.SearchParam.Criteria.Clone(); cloneParam.Keywords = suggestion.Title; searchResultViewModel.Suggestions.Add(new Suggestion { Title = suggestion.Title, Url = SearchUrlProvider.BuildSearchUrl(new BuildSearchUrlParam { SearchCriteria = cloneParam }) }); } } var imgDictionary = LineItemHelper.BuildImageDictionaryFor(param.ImageUrls); var searchResultsList = new List <(ProductSearchViewModel, ProductDocument)>(); // Populate search results foreach (var resultItem in param.SearchResult.Documents) { searchResultsList.Add((ProductSearchViewModelFactory.GetProductSearchViewModel(resultItem, param.SearchParam.Criteria, imgDictionary), resultItem)); } searchResultViewModel.SearchResults = await ProductSearchViewModelFactory.EnrichAppendProductSearchViewModels(searchResultsList, param.SearchParam.Criteria).ConfigureAwait(false); var facets = BuildFacets(param.SearchParam.Criteria, param.SearchResult); searchResultViewModel.Facets = facets; searchResultViewModel.Pagination = BuildPaginationForSearchResults(param.SearchResult, param.SearchParam, SearchConfiguration.MaximumPages); searchResultViewModel.PromotedFacetValues = BuildPromotedFacetValues(facets); // TODO: Fix this new SearchSortByResolver <TParam>(LocalizationProvider, GetSearchSortByList(SearchType), GenerateUrl) .Resolve(searchResultViewModel, param.SearchParam); searchResultViewModel.BaseUrl = param.SearchParam.Criteria.BaseUrl; return(searchResultViewModel); }
protected virtual SearchCriteria BuildProductsSearchCriteria() { var criteria = BaseSearchCriteriaProvider.GetSearchCriteriaAsync(SearchQuery, RequestUtils.GetBaseUrl(Request).ToString(), true, CurrentPage).Result; criteria.SortBy = IsProductsSearchActive ? SortBy : null; criteria.SortDirection = IsProductsSearchActive ? SortDirection : null; criteria.SelectedFacets.AddRange(SearchUrlProvider.BuildSelectedFacets(Request.QueryString)); return(criteria); }
public virtual async Task <IHttpActionResult> GetFacets(GetFacetsRequest request) { var queryString = HttpUtility.ParseQueryString(request.QueryString); var searchCriteria = await BaseSearchCriteriaProvider.GetSearchCriteriaAsync(queryString["keywords"], RequestUtils.GetBaseUrl(Request).ToString(), true).ConfigureAwait(false); searchCriteria.NumberOfItemsPerPage = 0; searchCriteria.SelectedFacets.AddRange(SearchUrlProvider.BuildSelectedFacets(queryString)); var searchResultsViewModel = await SearchViewService.GetSearchViewModelAsync(searchCriteria).ConfigureAwait(false); searchResultsViewModel.ProductSearchResults.Facets = searchResultsViewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); return(Ok(searchResultsViewModel)); }
protected override string GenerateUrl(CreateSearchPaginationParam <SearchParam> param) { if (param.SearchParameters == null) { throw new ArgumentNullException(nameof(param)); } if (param.SearchParameters.Criteria == null) { throw new ArgumentException("param.Criteria is null", nameof(param)); } return(SearchUrlProvider.BuildSearchUrl(new BuildSearchUrlParam { SearchCriteria = param.SearchParameters.Criteria, CorrectedSearchTerms = param.CorrectedSearchTerms })); }
public virtual async Task <IHttpActionResult> GetSearchResults(GetSearchResultsRequest request) { var queryString = HttpUtility.ParseQueryString(request.QueryString ?? ""); var SelectedFacets = SearchUrlProvider.BuildSelectedFacets(queryString).ToList(); var CurrentPage = int.TryParse(queryString[SearchRequestParams.Page], out int page) && page > 0 ? page : 1; var SortDirection = queryString[SearchRequestParams.SortDirection] ?? SearchRequestParams.DefaultSortDirection; var SortBy = queryString[SearchRequestParams.SortBy] ?? SearchRequestParams.DefaultSortBy; var BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(); var Keywords = queryString[SearchRequestParams.Keywords]; BaseSearchViewModel viewModel; if (!string.IsNullOrEmpty(request.CategoryId)) { var param = new GetCategoryBrowsingViewModelParam { CategoryId = request.CategoryId, CategoryName = string.Empty, BaseUrl = BaseUrl, IsAllProducts = false, NumberOfItemsPerPage = SearchConfiguration.MaxItemsPerPage, Page = CurrentPage, SortBy = SortBy, SortDirection = SortDirection, InventoryLocationIds = await InventoryLocationProvider.GetInventoryLocationIdsForSearchAsync().ConfigureAwait(false), SelectedFacets = SelectedFacets, CultureInfo = ComposerContext.CultureInfo, }; viewModel = await CategoryBrowsingViewService.GetCategoryBrowsingViewModelAsync(param).ConfigureAwait(false); } else { var searchCriteria = await BaseSearchCriteriaProvider.GetSearchCriteriaAsync(Keywords, BaseUrl, true, CurrentPage).ConfigureAwait(false); searchCriteria.SortBy = SortBy; searchCriteria.SortDirection = SortDirection; searchCriteria.SelectedFacets.AddRange(SelectedFacets); viewModel = await SearchViewService.GetSearchViewModelAsync(searchCriteria).ConfigureAwait(false); } viewModel.ProductSearchResults.Facets = viewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); return(Ok(viewModel)); }
public virtual async Task <IHttpActionResult> GetSearchResultsBySkus(GetSearchResultsBySkusRequest request) { if (request.Skus == null) { return(BadRequest($"{nameof(request.Skus)} cannot be empty")); } var queryString = HttpUtility.ParseQueryString(request.QueryString ?? ""); var SelectedFacets = SearchUrlProvider.BuildSelectedFacets(queryString).ToList(); var Keywords = queryString[SearchRequestParams.Keywords]; var BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(); var IncludeFactes = request.IncludeFacets; var searchCriteria = await BaseSearchCriteriaProvider.GetSearchCriteriaAsync(Keywords, BaseUrl, IncludeFactes).ConfigureAwait(false); var searchBySkusCriteria = new SearchBySkusCriteria { Skus = request.Skus, Keywords = searchCriteria.Keywords, NumberOfItemsPerPage = request.Skus.Length, StartingIndex = searchCriteria.StartingIndex, Page = searchCriteria.Page, BaseUrl = searchCriteria.BaseUrl, Scope = searchCriteria.Scope, CultureInfo = searchCriteria.CultureInfo, InventoryLocationIds = searchCriteria.InventoryLocationIds, AvailabilityDate = searchCriteria.AvailabilityDate, IncludeFacets = searchCriteria.IncludeFacets }; searchBySkusCriteria.SelectedFacets.AddRange(SelectedFacets); var viewModel = await SearchViewService.GetSearchViewModelAsync(searchBySkusCriteria).ConfigureAwait(false); if (IncludeFactes) { viewModel.ProductSearchResults.Facets = viewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); } return(Ok(viewModel)); }
protected virtual SearchCriteria BuildProductsSearchCriteria() { var criteria = new SearchCriteria { Keywords = SearchQuery, NumberOfItemsPerPage = SearchConfiguration.MaxItemsPerPage, IncludeFacets = true, StartingIndex = (CurrentPage - 1) * SearchConfiguration.MaxItemsPerPage, SortBy = IsProductsSearchActive ? SortBy: null, SortDirection = IsProductsSearchActive ? SortDirection: null, Page = CurrentPage, BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(), CultureInfo = ComposerContext.CultureInfo, Scope = ComposerContext.Scope, InventoryLocationIds = InventoryLocationProvider.GetInventoryLocationIdsForSearchAsync().Result, AutoCorrect = SearchConfiguration.AutoCorrectSearchTerms }; criteria.SelectedFacets.AddRange(SearchUrlProvider.BuildSelectedFacets(Request.QueryString)); return(criteria); }