Skip to content

Commit 50754f2

Browse files
VCST-3596: Add statistics to range facet types (#45)
Co-authored-by: Artem Dudarev <[email protected]>
1 parent f7af5d7 commit 50754f2

File tree

7 files changed

+48
-16
lines changed

7 files changed

+48
-16
lines changed

src/VirtoCommerce.Xapi.Core/Extensions/IHasLanguageExtensions.cs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ namespace VirtoCommerce.Xapi.Core.Extensions
88
{
99
public static class IHasLanguageExtensions
1010
{
11+
/// <summary>
12+
/// Looking for first best-match language-specific value in the enumerable
13+
/// </summary>
14+
/// <param name="hasLanguages">An enumerable with values to search</param>
15+
/// <param name="language">Language to search</param>
16+
/// <returns>First matching item to the specified language</returns>
17+
public static IHasLanguageCode FirstBestMatchForLanguage(this IEnumerable<IHasLanguageCode> hasLanguages, string language)
18+
{
19+
return hasLanguages.FirstBestMatchForLanguage(x => x.LanguageCode, language);
20+
}
21+
1122
/// <summary>
1223
/// Looking for first best-match language-specific value in the enumerable, based on specified language value selector function
1324
/// </summary>
@@ -20,12 +31,14 @@ public static T FirstBestMatchForLanguage<T>(this IEnumerable<T> hasLanguages, F
2031
{
2132
ArgumentNullException.ThrowIfNull(hasLanguages);
2233

23-
//Try find object for passed language event if it null
24-
var result = hasLanguages.FirstOrDefault(x => langSelector(x)?.EqualsIgnoreCase(language) ?? langSelector(x) == language);
34+
var hasLanguagesCollection = hasLanguages as ICollection<T> ?? hasLanguages.ToList();
35+
36+
//Try to find object for passed language event if it is null
37+
var result = hasLanguagesCollection.FirstOrDefault(x => langSelector(x)?.EqualsIgnoreCase(language) ?? langSelector(x) == language);
2538
if (result == null)
2639
{
2740
//find the first with no language set
28-
result = hasLanguages.FirstOrDefault(x => langSelector(x) == null);
41+
result = hasLanguagesCollection.FirstOrDefault(x => langSelector(x) == null);
2942
}
3043
return result;
3144
}
@@ -41,16 +54,5 @@ public static IHasLanguage FirstBestMatchForLanguage(this IEnumerable<IHasLangua
4154
{
4255
return hasLanguages.FirstBestMatchForLanguage(x => x.LanguageCode, language);
4356
}
44-
45-
/// <summary>
46-
/// Looking for first best-match language-specific value in the enumerable
47-
/// </summary>
48-
/// <param name="hasLanguages">An enumerable with values to search</param>
49-
/// <param name="language">Language to search</param>
50-
/// <returns>First matching item to the specified language</returns>
51-
public static IHasLanguageCode FirstBestMatchForLanguage(this IEnumerable<IHasLanguageCode> hasLanguages, string language)
52-
{
53-
return hasLanguages.FirstBestMatchForLanguage(x => x.LanguageCode, language);
54-
}
5557
}
5658
}

src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetResult.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ public RangeFacetResult()
1010
}
1111

1212
public IList<FacetRange> Ranges { get; set; } = new List<FacetRange>();
13+
14+
public RangeFacetStatistics Statistics { get; set; }
1315
}
1416
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace VirtoCommerce.Xapi.Core.Models.Facets;
2+
3+
public class RangeFacetStatistics
4+
{
5+
public double? Max { get; set; }
6+
public double? Min { get; set; }
7+
}

src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetResultType.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,18 @@ public RangeFacetResultType()
1111

1212
Field(d => d.Name, nullable: false).Description("The key/name of the facet.");
1313
Field(d => d.Label, nullable: false).Description("Localized name of the facet.");
14+
1415
Field<NonNullGraphType<FacetTypeEnum>>("FacetType")
1516
.Description("The three types of facets. Terms, Range, Filter");
17+
1618
Field<NonNullGraphType<ListGraphType<NonNullGraphType<FacetRangeType>>>>("Ranges")
1719
.Description("Ranges")
1820
.Resolve(context => context.Source.Ranges);
1921

22+
Field<RangeFacetStatisticsType>("Statistics")
23+
.Description("Statistics for the facet, such as min and max values across ranges.")
24+
.Resolve(context => context.Source.Statistics);
25+
2026
IsTypeOf = obj => obj is RangeFacetResult;
2127
Interface<FacetInterface>();
2228
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using VirtoCommerce.Xapi.Core.Models.Facets;
2+
3+
namespace VirtoCommerce.Xapi.Core.Schemas.Facets
4+
{
5+
public class RangeFacetStatisticsType : ExtendableGraphType<RangeFacetStatistics>
6+
{
7+
public RangeFacetStatisticsType()
8+
{
9+
Name = "RangeFacetStatistics";
10+
11+
Field(d => d.Max, nullable: true).Description("The maximum value in the range or across ranges.");
12+
Field(d => d.Min, nullable: true).Description("The minimum value in the range or across ranges.");
13+
}
14+
}
15+
}

src/VirtoCommerce.Xapi.Core/VirtoCommerce.Xapi.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<PackageReference Include="System.Reactive" Version="6.0.0" />
3030
<PackageReference Include="VirtoCommerce.Platform.Core" Version="3.895.0" />
3131
<PackageReference Include="VirtoCommerce.CustomerModule.Core" Version="3.833.0" />
32-
<PackageReference Include="VirtoCommerce.SearchModule.Core" Version="3.804.0" />
32+
<PackageReference Include="VirtoCommerce.SearchModule.Core" Version="3.816.0" />
3333
<PackageReference Include="VirtoCommerce.Seo.Core" Version="3.802.0" />
3434
<PackageReference Include="VirtoCommerce.StoreModule.Core" Version="3.818.0" />
3535
<PackageReference Include="VirtoCommerce.TaxModule.Core" Version="3.802.0" />

src/VirtoCommerce.Xapi.Web/module.manifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<dependencies>
99
<dependency id="VirtoCommerce.ApplicationInsights" version="3.804.0" optional="true" />
1010
<dependency id="VirtoCommerce.Customer" version="3.833.0" />
11-
<dependency id="VirtoCommerce.Search" version="3.804.0" />
11+
<dependency id="VirtoCommerce.Search" version="3.816.0" />
1212
<dependency id="VirtoCommerce.Seo" version="3.801.0" />
1313
<dependency id="VirtoCommerce.Store" version="3.818.0" />
1414
<dependency id="VirtoCommerce.Tax" version="3.802.0" optional="true" />

0 commit comments

Comments
 (0)