diff --git a/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Core/RecommendationsGatewayModule.Core.csproj b/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Core/RecommendationsGatewayModule.Core.csproj
index c72e443c9..bbe2e07b1 100644
--- a/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Core/RecommendationsGatewayModule.Core.csproj
+++ b/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Core/RecommendationsGatewayModule.Core.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Data/RecommendationsGatewayModule.Data.csproj b/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Data/RecommendationsGatewayModule.Data.csproj
index aa6cd7656..7393c44b6 100644
--- a/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Data/RecommendationsGatewayModule.Data.csproj
+++ b/samples/RecommendationsGatewayModule/RecommendationsGatewayModule.Data/RecommendationsGatewayModule.Data.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/samples/VirtoCommerce.Exp.ExtensionSamples/VirtoCommerce.Exp.ExtensionSamples.csproj b/samples/VirtoCommerce.Exp.ExtensionSamples/VirtoCommerce.Exp.ExtensionSamples.csproj
index 39d5d8328..2f899ec0b 100644
--- a/samples/VirtoCommerce.Exp.ExtensionSamples/VirtoCommerce.Exp.ExtensionSamples.csproj
+++ b/samples/VirtoCommerce.Exp.ExtensionSamples/VirtoCommerce.Exp.ExtensionSamples.csproj
@@ -1,4 +1,4 @@
-
+
netcoreapp3.1
@@ -15,7 +15,7 @@
-
+
diff --git a/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Index/IndexFieldsMapper.cs b/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Index/IndexFieldsMapper.cs
index a5a66e967..d7c4ed870 100644
--- a/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Index/IndexFieldsMapper.cs
+++ b/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Index/IndexFieldsMapper.cs
@@ -1,103 +1,103 @@
-using System.Collections.Generic;
-using System.Linq;
+using System.Collections.Generic;
+using System.Linq;
using System.Text.RegularExpressions;
-
-namespace VirtoCommerce.ExperienceApiModule.XDigitalCatalog.Index
-{
- public static class IndexFieldsMapper
- {
- public class RegexpNameMapper
- {
+
+namespace VirtoCommerce.ExperienceApiModule.XDigitalCatalog.Index
+{
+ public static class IndexFieldsMapper
+ {
+ public class RegexpNameMapper
+ {
protected Regex _regex { get; set; }
-
- protected string Replacement { get; set; }
- public string[] AdditionalFields { get; set; }
-
- public RegexpNameMapper(string pattern, string replacement, string[] additionalFields = null)
- {
- _regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
- Replacement = replacement;
- AdditionalFields = additionalFields;
- }
-
- public virtual bool CanMap(string input)
+
+ protected string Replacement { get; set; }
+ public string[] AdditionalFields { get; set; }
+
+ public RegexpNameMapper(string pattern, string replacement, string[] additionalFields = null)
{
- return _regex.IsMatch(input);
- }
-
- public virtual string Map(string input)
- {
- return _regex.Replace(input, Replacement);
- }
- }
+ _regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
+ Replacement = replacement;
+ AdditionalFields = additionalFields;
+ }
+
+ public virtual bool CanMap(string input)
+ {
+ return _regex.IsMatch(input);
+ }
+
+ public virtual string Map(string input)
+ {
+ return _regex.Replace(input, Replacement);
+ }
+ }
private static IList _mappers;
-
+
public static IList Mappers
{
get
{
if (_mappers == null)
{
- _mappers = new List()
- {
- new RegexpNameMapper(@".*", "$0", new [] { "__object.id", "__object.categoryId", "__object.catalogId" }),
- new RegexpNameMapper(@"(items.)?price[s]?.(?[^\.]+).*$","__prices.$2", new [] { "__prices.currency" }),
- new RegexpNameMapper(@"^items.variations", "__variations", new [] { "__variations" }),
- new RegexpNameMapper(@"^variations", "__variations", new [] { "__variations" }),
- new RegexpNameMapper(@"^items", "__object"),
+ _mappers = new List()
+ {
+ new RegexpNameMapper(@".*", "$0", new [] { "__object.id", "__object.categoryId", "__object.catalogId" }),
+ new RegexpNameMapper(@"(items.)?price[s]?.(?[^\.]+).*$","__prices.$2", new [] { "__prices.currency" }),
+ new RegexpNameMapper(@"^items.variations", "__variations", new [] { "__variations" }),
+ new RegexpNameMapper(@"^variations", "__variations", new [] { "__variations" }),
+ new RegexpNameMapper(@"^items", "__object"),
new RegexpNameMapper(@"^(?!__)", "__object."),
- new RegexpNameMapper(@"properties.value$", "properties.values"),
- new RegexpNameMapper(@"imgSrc", "images"),
-
- new RegexpNameMapper(@"__object.availabilityData.isActive", "__object.isActive"),
- new RegexpNameMapper(@"__object.availabilityData.isBuyable", "__object.isBuyable"),
- new RegexpNameMapper(@"__object.availabilityData.trackInventory", "__object.trackInventory"),
-
- new RegexpNameMapper(@"__object.parent.*", "__object.parentId"),
- new RegexpNameMapper(@"__object.hasParent.*", "__object.parentId"),
- new RegexpNameMapper(@"__object.parent.*", "__object.parentId"),
-
- new RegexpNameMapper(@"__object.category.*", "__object.categoryId"),
- new RegexpNameMapper(@"__object.descriptions", "__object.reviews"),
- new RegexpNameMapper(@"__object.description.*", "__object.reviews"),
+ new RegexpNameMapper(@"properties.value$", "properties.values"),
+ new RegexpNameMapper(@"imgSrc", "images"),
+
+ new RegexpNameMapper(@"__object.availabilityData.isActive", "__object.isActive"),
+ new RegexpNameMapper(@"__object.availabilityData.isBuyable", "__object.isBuyable"),
+ new RegexpNameMapper(@"__object.availabilityData.trackInventory", "__object.trackInventory"),
+
+ new RegexpNameMapper(@"__object.parent.*", "__object.parentId"),
+ new RegexpNameMapper(@"__object.hasParent.*", "__object.parentId"),
+ new RegexpNameMapper(@"__object.parent.*", "__object.parentId"),
+
+ new RegexpNameMapper(@"__object.category.*", "__object.categoryId"),
+ new RegexpNameMapper(@"__object.descriptions", "__object.reviews"),
+ new RegexpNameMapper(@"__object.description.*", "__object.reviews"),
new RegexpNameMapper(@"__object.seoInfo.*", "__object.seoInfos"),
new RegexpNameMapper(@"__object.breadcrumbs.*", "__object.outlines"),
-
- #region Category
-
- new RegexpNameMapper(@"__object.slug$", "__object.outlines", new [] { "__object.seoInfos" }),
- new RegexpNameMapper(@"__object.outline$", "__object.outlines"),
- new RegexpNameMapper(@"__object.level$", "__object.outlines"),
- #endregion
+
+ #region Category
+
+ new RegexpNameMapper(@"__object.slug$", "__object.outlines", new [] { "__object.seoInfos" }),
+ new RegexpNameMapper(@"__object.outline$", "__object.outlines"),
+ new RegexpNameMapper(@"__object.level$", "__object.outlines"),
+ #endregion
};
}
return _mappers;
}
- }
-
- public static IEnumerable MapToIndexIncludes(IEnumerable includeFields)
- {
+ }
+
+ public static IEnumerable MapToIndexIncludes(IEnumerable includeFields)
+ {
IEnumerable result = new string[] { };
- foreach (var includeField in includeFields)
- {
- var indexField = includeField;
- foreach (var mapper in Mappers)
- {
- if (mapper.CanMap(indexField))
- {
- indexField = mapper.Map(indexField);
- if (mapper.AdditionalFields != null)
- {
- result = result.Union(mapper.AdditionalFields);
- }
- }
- }
- result = result.Union(new string[] { indexField });
- }
- return result;
- }
+ foreach (var includeField in includeFields)
+ {
+ var indexField = includeField;
+ foreach (var mapper in Mappers)
+ {
+ if (mapper.CanMap(indexField))
+ {
+ indexField = mapper.Map(indexField);
+ if (mapper.AdditionalFields != null)
+ {
+ result = result.Union(mapper.AdditionalFields);
+ }
+ }
+ }
+ result = result.Union(new string[] { indexField });
+ }
+ return result;
+ }
}
-}
+}
diff --git a/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Schemas/CategoryType.cs b/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Schemas/CategoryType.cs
index 7d7204d7e..f7ae4fd10 100644
--- a/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Schemas/CategoryType.cs
+++ b/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/Schemas/CategoryType.cs
@@ -6,7 +6,8 @@
using GraphQL.DataLoader;
using GraphQL.Types;
using MediatR;
-using VirtoCommerce.CoreModule.Core.Seo;
+using VirtoCommerce.CatalogModule.Core.Model;
+using VirtoCommerce.CoreModule.Core.Seo;
using VirtoCommerce.ExperienceApiModule.Core.Extensions;
using VirtoCommerce.ExperienceApiModule.Core.Schemas;
using VirtoCommerce.Platform.Core.Common;
@@ -109,6 +110,41 @@ public CategoryType(IMediator mediator, IDataLoaderContextAccessor dataLoader)
result = result.Where(x => names.Contains(x.Name, StringComparer.InvariantCultureIgnoreCase)).ToList();
}
return result;
+ });
+
+ Field>("descriptions",
+ arguments: new QueryArguments(new QueryArgument { Name = "type" }),
+ resolve: context =>
+ {
+ var descriptions = context.Source.Category.Descriptions;
+ var cultureName = context.GetArgumentOrValue("cultureName");
+ var type = context.GetArgumentOrValue("type");
+ if (cultureName != null)
+ {
+ descriptions = descriptions.Where(x => string.IsNullOrEmpty(x.LanguageCode) || x.LanguageCode.EqualsInvariant(cultureName)).ToList();
+ }
+ if (type != null)
+ {
+ descriptions = descriptions.Where(x => x.DescriptionType?.EqualsInvariant(type) ?? true).ToList();
+ }
+ return descriptions;
+ });
+
+ Field("description",
+ arguments: new QueryArguments(new QueryArgument { Name = "type" }),
+ resolve: context =>
+ {
+ var descriptions = context.Source.Category.Descriptions;
+ var type = context.GetArgumentOrValue("type");
+ var cultureName = context.GetArgumentOrValue("cultureName");
+
+ if (!descriptions.IsNullOrEmpty())
+ {
+ return descriptions.Where(x => x.DescriptionType.EqualsInvariant(type ?? "FullReview")).FirstBestMatchForLanguage(cultureName) as CategoryDescription
+ ?? descriptions.FirstBestMatchForLanguage(cultureName) as CategoryDescription;
+ }
+
+ return null;
});
}
diff --git a/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/VirtoCommerce.XDigitalCatalog.csproj b/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/VirtoCommerce.XDigitalCatalog.csproj
index 2a8ed8957..bf9f909b5 100644
--- a/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/VirtoCommerce.XDigitalCatalog.csproj
+++ b/src/VirtoCommerce.ExperienceApiModule.DigitalCatalog/VirtoCommerce.XDigitalCatalog.csproj
@@ -21,12 +21,12 @@
-
+
-
+
-
+
diff --git a/src/VirtoCommerce.ExperienceApiModule.Web/VirtoCommerce.ExperienceApiModule.Web.csproj b/src/VirtoCommerce.ExperienceApiModule.Web/VirtoCommerce.ExperienceApiModule.Web.csproj
index 3d1316034..1a32612ba 100644
--- a/src/VirtoCommerce.ExperienceApiModule.Web/VirtoCommerce.ExperienceApiModule.Web.csproj
+++ b/src/VirtoCommerce.ExperienceApiModule.Web/VirtoCommerce.ExperienceApiModule.Web.csproj
@@ -34,7 +34,7 @@
-
+
diff --git a/src/XProfile/VirtoCommerce.ExperienceApiModule.XProfile.Tests/VirtoCommerce.ExperienceApiModule.XProfile.Tests.csproj b/src/XProfile/VirtoCommerce.ExperienceApiModule.XProfile.Tests/VirtoCommerce.ExperienceApiModule.XProfile.Tests.csproj
index cbb5c6541..cb8fa090d 100644
--- a/src/XProfile/VirtoCommerce.ExperienceApiModule.XProfile.Tests/VirtoCommerce.ExperienceApiModule.XProfile.Tests.csproj
+++ b/src/XProfile/VirtoCommerce.ExperienceApiModule.XProfile.Tests/VirtoCommerce.ExperienceApiModule.XProfile.Tests.csproj
@@ -17,7 +17,10 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
diff --git a/src/XPurchase/VirtoCommerce.ExperienceApiModule.XOrder/VirtoCommerce.ExperienceApiModule.XOrder.csproj b/src/XPurchase/VirtoCommerce.ExperienceApiModule.XOrder/VirtoCommerce.ExperienceApiModule.XOrder.csproj
index 3503842e1..f1c3e8e2e 100644
--- a/src/XPurchase/VirtoCommerce.ExperienceApiModule.XOrder/VirtoCommerce.ExperienceApiModule.XOrder.csproj
+++ b/src/XPurchase/VirtoCommerce.ExperienceApiModule.XOrder/VirtoCommerce.ExperienceApiModule.XOrder.csproj
@@ -22,7 +22,7 @@
-
+
diff --git a/src/XPurchase/VirtoCommerce.XPurchase.Domain.Tests/VirtoCommerce.XPurchase.Tests.csproj b/src/XPurchase/VirtoCommerce.XPurchase.Domain.Tests/VirtoCommerce.XPurchase.Tests.csproj
index 2b90c05de..6af317a04 100644
--- a/src/XPurchase/VirtoCommerce.XPurchase.Domain.Tests/VirtoCommerce.XPurchase.Tests.csproj
+++ b/src/XPurchase/VirtoCommerce.XPurchase.Domain.Tests/VirtoCommerce.XPurchase.Tests.csproj
@@ -18,7 +18,10 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
diff --git a/tests/VirtoCommerce.ExperienceApiModule.Tests/VirtoCommerce.ExperienceApiModule.Tests.csproj b/tests/VirtoCommerce.ExperienceApiModule.Tests/VirtoCommerce.ExperienceApiModule.Tests.csproj
index d05778dd3..133ee33ea 100644
--- a/tests/VirtoCommerce.ExperienceApiModule.Tests/VirtoCommerce.ExperienceApiModule.Tests.csproj
+++ b/tests/VirtoCommerce.ExperienceApiModule.Tests/VirtoCommerce.ExperienceApiModule.Tests.csproj
@@ -12,7 +12,11 @@
-
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
diff --git a/tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests.csproj b/tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests.csproj
index e2fb4d885..5c3b1cfe6 100644
--- a/tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests.csproj
+++ b/tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests/VirtoCommerce.ExperienceApiModule.XOrder.Tests.csproj
@@ -13,7 +13,10 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
diff --git a/tests/VirtoCommerce.XDigitalCatalog.Tests/VirtoCommerce.XDigitalCatalog.Tests.csproj b/tests/VirtoCommerce.XDigitalCatalog.Tests/VirtoCommerce.XDigitalCatalog.Tests.csproj
index cc9f54e79..f6c4dab06 100644
--- a/tests/VirtoCommerce.XDigitalCatalog.Tests/VirtoCommerce.XDigitalCatalog.Tests.csproj
+++ b/tests/VirtoCommerce.XDigitalCatalog.Tests/VirtoCommerce.XDigitalCatalog.Tests.csproj
@@ -17,7 +17,10 @@
-
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+