diff --git a/src/VirtoCommerce.Xapi.Core/Queries/SlugInfoQuery.cs b/src/VirtoCommerce.Xapi.Core/Queries/SlugInfoQuery.cs index e502450..a24dd04 100644 --- a/src/VirtoCommerce.Xapi.Core/Queries/SlugInfoQuery.cs +++ b/src/VirtoCommerce.Xapi.Core/Queries/SlugInfoQuery.cs @@ -20,6 +20,7 @@ public class SlugInfoQuery : Query #pragma warning restore VC0008 public string StoreId { get; set; } public string UserId { get; set; } + public string OrganizationId { get; set; } public string CultureName { get; set; } public override IEnumerable GetArguments() diff --git a/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryBuilder.cs b/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryBuilder.cs index 994f18f..5811b4c 100644 --- a/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryBuilder.cs +++ b/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryBuilder.cs @@ -1,6 +1,9 @@ +using System.Threading.Tasks; +using GraphQL; using MediatR; using Microsoft.AspNetCore.Authorization; using VirtoCommerce.Xapi.Core.BaseQueries; +using VirtoCommerce.Xapi.Core.Extensions; using VirtoCommerce.Xapi.Core.Models; using VirtoCommerce.Xapi.Core.Queries; using VirtoCommerce.Xapi.Core.Schemas; @@ -15,5 +18,12 @@ public SlugInfoQueryBuilder(IMediator mediator, IAuthorizationService authorizat } protected override string Name => "slugInfo"; + + protected override Task BeforeMediatorSend(IResolveFieldContext context, SlugInfoQuery request) + { + request.OrganizationId = context.GetCurrentOrganizationId(); + + return base.BeforeMediatorSend(context, request); + } } } diff --git a/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryHandler.cs b/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryHandler.cs index 8c6e9cd..1c0a52c 100644 --- a/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryHandler.cs +++ b/src/VirtoCommerce.Xapi.Data/Queries/SlugInfoQueryHandler.cs @@ -22,7 +22,7 @@ public class SlugInfoQueryHandler( : IQueryHandler { - public async Task Handle(SlugInfoQuery request, CancellationToken cancellationToken) + public virtual async Task Handle(SlugInfoQuery request, CancellationToken cancellationToken) { var result = new SlugInfoResponse(); @@ -56,7 +56,7 @@ public async Task Handle(SlugInfoQuery request, CancellationTo criteria.Slug = lastSegment; criteria.UserId = request.UserId; - result.EntityInfo = await GetBestMatchingSeoInfo(criteria, store); + result.EntityInfo = await GetBestMatchingSeoInfo(request, criteria, store); if (result.EntityInfo == null) { @@ -72,7 +72,7 @@ public async Task Handle(SlugInfoQuery request, CancellationTo if (brokenLinkResult.Results.Count > 0) { var resultItem = brokenLinkResult.Results.FirstOrDefault(x => - (x.Language == request.CultureName) || + x.Language == request.CultureName || (!request.CultureName.IsNullOrEmpty() && x.Language.IsNullOrEmpty())) ?? brokenLinkResult.Results.FirstOrDefault(); @@ -83,9 +83,10 @@ public async Task Handle(SlugInfoQuery request, CancellationTo return result; } - protected virtual async Task GetBestMatchingSeoInfo(SeoSearchCriteria criteria, Store store) + protected virtual async Task GetBestMatchingSeoInfo(SlugInfoQuery request, SeoSearchCriteria criteria, Store store) { var itemsToMatch = await seoResolver.FindSeoAsync(criteria); + return itemsToMatch.GetBestMatchingSeoInfo(store, criteria.LanguageCode); } }