Exemple #1
0
        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 Query CreateQuery(SearchBySkusCriteria searchBySkusCriteria)
        {
            var skus       = searchBySkusCriteria.Skus.Select(s => $"Sku:{s}").ToList();
            var customExpr = String.Join(" OR ", skus);

            return(new Query
            {
                Filter = new FilterGroup
                {
                    BinaryOperator = BinaryOperator.And,
                    Filters = new List <Filter>
                    {
                        new Filter
                        {
                            Member = "Sku",
                            CustomExpression = customExpr,
                            Operator = Operator.Custom
                        }
                    }
                }
            });
        }