Exemplo n.º 1
0
        async Task <PeopleSearchResults> ProductSearchResults(SearchParams searchParams, bool correctFacets)
        {
            var fieldsEqualsList = new List <FieldFilter>();


            //Facets from URL
            if (searchParams.Facets != null && searchParams.Facets.Any())
            {
                fieldsEqualsList.AddRange(AddFacetFilters(searchParams.Facets));
            }

            List <FieldFilter> fieldFilters = new List <FieldFilter>();

            fieldFilters.Add(new FieldFilter()
            {
                name = "_templatename", value = "Person"
            });
            fieldFilters.Add(new FieldFilter()
            {
                name = "ismvp", value = "true"
            });
            fieldsEqualsList.AddRange(fieldFilters);
            GraphQL.GraphQLResponse <Response> response = await _graphQLProvider.SendQueryAsync <Response>(searchParams.IsInEditingMode, GraphQLFiles.PeopleSearchAdvanced, new
            {
                language = searchParams.Language,
                rootItem = new Guid(searchParams.RootItemId).ToString("N"),
                pageSize = searchParams.PageSize,
                cursorValueToGetItemsAfter = searchParams.CursorValueToGetItemsAfter?.ToString(),
                query       = searchParams.Query,
                fieldsEqual = fieldsEqualsList,
                facetOn     = searchParams.FacetOn
            });

            if (searchParams.Facets != null && searchParams.Facets.Any())
            {
                response.Data.Search.facets = response.Data.Search.facets.Select(fc => UpdateFacetState(fc, searchParams.Facets)).ToList();
            }
            var result = new PeopleSearchResults
            {
                People          = response.Data.Search.results.items.Select(x => x.item),
                Facets          = response.Data.Search.facets,
                TotalCount      = response.Data.Search.results.totalCount,
                StartCursor     = int.Parse(response.Data.Search.results.pageInfo.startCursor),
                EndCursor       = int.Parse(response.Data.Search.results.pageInfo.endCursor),
                HasNextPage     = response.Data.Search.results.pageInfo.hasNextPage,
                HasPreviousPage = response.Data.Search.results.pageInfo.hasPreviousPage,
                PageSize        = searchParams.PageSize != 0 ? searchParams.PageSize : null,
                FilterFacets    = searchParams.FilterFacets,
                keyword         = searchParams.Query,
                CurrentPage     = !searchParams.PageSize.HasValue
                                        ? 0
                                        : Convert.ToInt32(Math.Ceiling(int.Parse(response.Data.Search.results.pageInfo.endCursor) /
                                                                       Convert.ToDouble(searchParams.PageSize)))
            };

            if (correctFacets)
            {
                result = await CorrectFacetCounts(searchParams, result);

                if (searchParams.Facets != null && searchParams.Facets.Any())
                {
                    result.Facets = result.Facets.Select(fc => UpdateFacetState(fc, searchParams.Facets)).ToList();
                }
            }
            result.Facets = result.Facets.Select(fc => UpdateFacetValuesOrder(fc)).ToList();
            result.Facets.Remove(result.Facets.Where(x => x.name == "personyearaward").FirstOrDefault());
            return(result);
        }
Exemplo n.º 2
0
        async Task <PeopleSearchResults> CorrectFacetCounts(SearchParams searchParams, PeopleSearchResults originalResults)
        {
            foreach (string facetOn in searchParams.FacetOn)
            {
                SearchParams temp = CopySearchParams(searchParams);
                temp.PageSize = 1;
                temp.CursorValueToGetItemsAfter = 0;
                //var otherFacetOn = temp.FacetOn.Where(fc => !fc.Equals(facetOn)).ToList();
                var facets = temp.Facets.Where(fc => !fc.Key.Equals(facetOn)).ToList();
                //temp.FacetOn = otherFacetOn;
                temp.Facets = facets;

                var searchResultsTemp = await ProductSearchResults(temp, false);

                var facetToremove = originalResults.Facets.Where(fct => fct.name.Equals(facetOn)).FirstOrDefault();

                var facetToadd = searchResultsTemp.Facets.Where(fct => fct.name.Equals(facetOn)).FirstOrDefault();
                if (facetToremove != null && facetToadd != null)
                {
                    originalResults.Facets.Remove(facetToremove);
                    originalResults.Facets.Add(facetToadd);
                }
            }
            return(originalResults);
        }