Skip to content

Commit 0d0ace6

Browse files
authored
Merge branch 'dev' into feat/VCST-3156
2 parents c942435 + dc896a8 commit 0d0ace6

File tree

5 files changed

+101
-19
lines changed

5 files changed

+101
-19
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace VirtoCommerce.Xapi.Core.Models;
2+
3+
public class StoreDomainRequest
4+
{
5+
public string StoreId { get; set; }
6+
7+
public string Domain { get; set; }
8+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Threading.Tasks;
2+
using VirtoCommerce.StoreModule.Core.Model;
3+
using VirtoCommerce.Xapi.Core.Models;
4+
5+
namespace VirtoCommerce.Xapi.Core.Services;
6+
7+
public interface IStoreDomainResolverService
8+
{
9+
Task<Store> GetStoreAsync(StoreDomainRequest request);
10+
}

src/VirtoCommerce.Xapi.Data/Extensions/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using VirtoCommerce.Xapi.Core.Models;
99
using VirtoCommerce.Xapi.Core.Services;
1010
using VirtoCommerce.Xapi.Data.Security;
11-
using VirtoCommerce.Xapi.Data.Security.Authorization;
1211
using VirtoCommerce.Xapi.Data.Services;
1312
using static VirtoCommerce.Xapi.Core.ModuleConstants;
1413
using ContactSignInValidator = VirtoCommerce.Xapi.Data.Security.OpenIddict.ContactSignInValidator;
@@ -55,8 +54,8 @@ public static IServiceCollection AddXCore(this IServiceCollection services, ICon
5554
services.AddTransient<ITokenRequestValidator, ContactSignInValidator>();
5655
services.AddTransient<IExternalSignInValidator, ExternalSignInValidator>();
5756
services.AddTransient<IExternalSignInUserBuilder, ExternalSignInUserBuilder>();
58-
5957
services.AddTransient<ILoadUserToEvalContextService, LoadUserToEvalContextService>();
58+
services.AddTransient<IStoreDomainResolverService, StoreDomainResolverService>();
6059
services.AddDistributedLockService(configuration);
6160

6261
return services;

src/VirtoCommerce.Xapi.Data/Queries/GetStoreQueryHandler.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Linq;
34
using System.Threading;
@@ -15,6 +16,7 @@
1516
using VirtoCommerce.Xapi.Core.Infrastructure;
1617
using VirtoCommerce.Xapi.Core.Models;
1718
using VirtoCommerce.Xapi.Core.Queries;
19+
using VirtoCommerce.Xapi.Core.Services;
1820
using VirtoCommerce.Xapi.Core.Subscriptions;
1921
using StoreSettingGeneral = VirtoCommerce.StoreModule.Core.ModuleConstants.Settings.General;
2022
using StoreSettingSeo = VirtoCommerce.StoreModule.Core.ModuleConstants.Settings.SEO;
@@ -31,6 +33,7 @@ public class GetStoreQueryHandler : IQueryHandler<GetStoreQuery, StoreResponse>
3133
private readonly GraphQLWebSocketOptions _webSocketOptions;
3234
private readonly StoresOptions _storeOptions;
3335
private readonly IStoreAuthenticationService _storeAuthenticationService;
36+
private readonly IStoreDomainResolverService _storeDomainResolverService;
3437

3538
public GetStoreQueryHandler(
3639
IStoreService storeService,
@@ -40,8 +43,8 @@ public GetStoreQueryHandler(
4043
IOptions<IdentityOptions> identityOptions,
4144
IOptions<GraphQLWebSocketOptions> webSocketOptions,
4245
IOptions<StoresOptions> storeOptions,
43-
IStoreAuthenticationService storeAuthenticationService)
44-
46+
IStoreAuthenticationService storeAuthenticationService,
47+
IStoreDomainResolverService storeDomainResolverService)
4548
{
4649
_storeService = storeService;
4750
_storeSearchService = storeSearchService;
@@ -51,25 +54,13 @@ public GetStoreQueryHandler(
5154
_identityOptions = identityOptions.Value;
5255
_webSocketOptions = webSocketOptions.Value;
5356
_storeOptions = storeOptions.Value;
57+
_storeDomainResolverService = storeDomainResolverService;
5458
}
5559

5660
public async Task<StoreResponse> Handle(GetStoreQuery request, CancellationToken cancellationToken)
5761
{
58-
Store store = null;
59-
60-
if (!string.IsNullOrEmpty(request.StoreId))
61-
{
62-
store = await _storeService.GetByIdAsync(request.StoreId, clone: false);
63-
}
64-
else if (!string.IsNullOrEmpty(request.Domain))
65-
{
66-
store = await ResolveStoreByDomain(request.Domain);
67-
68-
if (store == null && !string.IsNullOrEmpty(_storeOptions.DefaultStore))
69-
{
70-
store = await _storeService.GetByIdAsync(_storeOptions.DefaultStore, clone: false);
71-
}
72-
}
62+
var storeResolverRequest = CreateStoreResolveRequest(request);
63+
var store = await _storeDomainResolverService.GetStoreAsync(storeResolverRequest);
7364

7465
if (store == null)
7566
{
@@ -135,6 +126,15 @@ public async Task<StoreResponse> Handle(GetStoreQuery request, CancellationToken
135126
return response;
136127
}
137128

129+
protected virtual StoreDomainRequest CreateStoreResolveRequest(GetStoreQuery request)
130+
{
131+
var storeResolverRequest = AbstractTypeFactory<StoreDomainRequest>.TryCreateInstance();
132+
storeResolverRequest.StoreId = request.StoreId;
133+
storeResolverRequest.Domain = request.Domain;
134+
return storeResolverRequest;
135+
}
136+
137+
[Obsolete("Not being called anymore. Use IStoreDomainResolverService.ResolveStoreByDomain(string domain) method.", DiagnosticId = "VC0010", UrlFormat = "https://docs.virtocommerce.org/products/products-virto3-versions/")]
138138
protected virtual async Task<Store> ResolveStoreByDomain(string domain)
139139
{
140140
if (_storeOptions.Domains.TryGetValue(domain, out var storeId))
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using System.Linq;
2+
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Options;
4+
using VirtoCommerce.Platform.Core.Common;
5+
using VirtoCommerce.StoreModule.Core.Model;
6+
using VirtoCommerce.StoreModule.Core.Model.Search;
7+
using VirtoCommerce.StoreModule.Core.Services;
8+
using VirtoCommerce.Xapi.Core.Models;
9+
using VirtoCommerce.Xapi.Core.Services;
10+
11+
namespace VirtoCommerce.Xapi.Data.Services;
12+
13+
public class StoreDomainResolverService : IStoreDomainResolverService
14+
{
15+
private readonly IStoreService _storeService;
16+
private readonly IStoreSearchService _storeSearchService;
17+
private readonly StoresOptions _storeOptions;
18+
19+
public StoreDomainResolverService(
20+
IStoreService storeService,
21+
IStoreSearchService storeSearchService,
22+
IOptions<StoresOptions> storeOptions)
23+
24+
{
25+
_storeService = storeService;
26+
_storeSearchService = storeSearchService;
27+
_storeOptions = storeOptions.Value;
28+
}
29+
30+
public virtual async Task<Store> GetStoreAsync(StoreDomainRequest request)
31+
{
32+
Store store = null;
33+
34+
if (!string.IsNullOrEmpty(request.StoreId))
35+
{
36+
store = await _storeService.GetByIdAsync(request.StoreId, clone: false);
37+
}
38+
else if (!string.IsNullOrEmpty(request.Domain))
39+
{
40+
store = await ResolveStoreByDomain(request.Domain);
41+
42+
if (store == null && !string.IsNullOrEmpty(_storeOptions.DefaultStore))
43+
{
44+
store = await _storeService.GetByIdAsync(_storeOptions.DefaultStore, clone: false);
45+
}
46+
}
47+
48+
return store;
49+
}
50+
51+
protected virtual async Task<Store> ResolveStoreByDomain(string domain)
52+
{
53+
if (_storeOptions.Domains.TryGetValue(domain, out var storeId))
54+
{
55+
return await _storeService.GetByIdAsync(storeId, clone: false);
56+
}
57+
58+
var criteria = AbstractTypeFactory<StoreSearchCriteria>.TryCreateInstance();
59+
criteria.Domain = domain;
60+
criteria.Take = 1;
61+
62+
var result = await _storeSearchService.SearchAsync(criteria, clone: false);
63+
return result.Results.FirstOrDefault();
64+
}
65+
}

0 commit comments

Comments
 (0)