Skip to content

Commit 160cc69

Browse files
committed
Ensure UmbracoContext exists on index build
1 parent fb0bf0d commit 160cc69

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/Umbraco.Cms.Integrations.Search.Algolia/Builders/ContentRecordBuilder.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Umbraco.Cms.Core.Models;
22
using Umbraco.Cms.Core.Routing;
33
using Umbraco.Cms.Core.Services;
4+
using Umbraco.Cms.Core.Web;
45
using Umbraco.Cms.Integrations.Search.Algolia.Models;
56
using Umbraco.Cms.Integrations.Search.Algolia.Services;
67
using Umbraco.Extensions;
@@ -19,7 +20,12 @@ public class ContentRecordBuilder
1920

2021
private readonly IRecordBuilderFactory _recordBuilderFactory;
2122

22-
public ContentRecordBuilder(IUserService userService, IPublishedUrlProvider urlProvider, IAlgoliaSearchPropertyIndexValueFactory algoliaSearchPropertyIndexValueFactory, IRecordBuilderFactory recordBuilderFactory)
23+
private readonly IUmbracoContextFactory _umbracoContextFactory;
24+
25+
public ContentRecordBuilder(IUserService userService, IPublishedUrlProvider urlProvider,
26+
IAlgoliaSearchPropertyIndexValueFactory algoliaSearchPropertyIndexValueFactory,
27+
IRecordBuilderFactory recordBuilderFactory,
28+
IUmbracoContextFactory umbracoContextFactory)
2329
{
2430
_userService = userService;
2531

@@ -28,10 +34,14 @@ public ContentRecordBuilder(IUserService userService, IPublishedUrlProvider urlP
2834
_algoliaSearchPropertyIndexValueFactory = algoliaSearchPropertyIndexValueFactory;
2935

3036
_recordBuilderFactory = recordBuilderFactory;
37+
38+
_umbracoContextFactory = umbracoContextFactory;
3139
}
3240

3341
public ContentRecordBuilder BuildFromContent(IContent content, Func<IProperty, bool> filter = null)
3442
{
43+
using var contextReference = _umbracoContextFactory.EnsureUmbracoContext();
44+
3545
_record.ObjectID = content.Key.ToString();
3646

3747
var creator = _userService.GetProfileById(content.CreatorId);

src/Umbraco.Cms.Integrations.Search.Algolia/Controllers/SearchController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public async Task<IActionResult> BuildIndex([FromBody] IndexConfiguration indexC
136136

137137
foreach (var contentItem in contentItems.Where(p => !p.Trashed))
138138
{
139-
var record = new ContentRecordBuilder(_userService, _urlProvider, _algoliaSearchPropertyIndexValueFactory, _recordBuilderFactory)
139+
var record = new ContentRecordBuilder(_userService, _urlProvider, _algoliaSearchPropertyIndexValueFactory, _recordBuilderFactory, _umbracoContextFactory)
140140
.BuildFromContent(contentItem, (p) => contentDataItem.Properties.Any(q => q.Alias == p.Alias))
141141
.Build();
142142

src/Umbraco.Cms.Integrations.Search.Algolia/Handlers/AlgoliaContentCacheRefresherHandler.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class AlgoliaContentCacheRefresherHandler : INotificationAsyncHandler<Con
3737

3838
private readonly IRecordBuilderFactory _recordBuilderFactory;
3939

40+
private readonly IUmbracoContextFactory _umbracoContextFactory;
41+
4042
public AlgoliaContentCacheRefresherHandler(
4143
IServerRoleAccessor serverRoleAccessor,
4244
ILogger<AlgoliaContentCacheRefresherHandler> logger,
@@ -46,7 +48,8 @@ public AlgoliaContentCacheRefresherHandler(
4648
IUserService userService,
4749
IPublishedUrlProvider urlProvider,
4850
IAlgoliaSearchPropertyIndexValueFactory algoliaSearchPropertyIndexValueFactory,
49-
IRecordBuilderFactory recordBuilderFactory)
51+
IRecordBuilderFactory recordBuilderFactory,
52+
IUmbracoContextFactory umbracoContextFactory)
5053
{
5154
_serverRoleAccessor = serverRoleAccessor;
5255
_contentService = contentService;
@@ -57,6 +60,7 @@ public AlgoliaContentCacheRefresherHandler(
5760
_urlProvider = urlProvider;
5861
_algoliaSearchPropertyIndexValueFactory = algoliaSearchPropertyIndexValueFactory;
5962
_recordBuilderFactory = recordBuilderFactory;
63+
_umbracoContextFactory = umbracoContextFactory;
6064
}
6165

6266
public async Task HandleAsync(ContentCacheRefresherNotification notification, CancellationToken cancellationToken)
@@ -103,7 +107,7 @@ protected async Task RebuildIndex(IEnumerable<IContent> entities)
103107
.FirstOrDefault(p => p.ContentType.Alias == entity.ContentType.Alias);
104108
if (indexConfiguration == null || indexConfiguration.ContentType.Alias != entity.ContentType.Alias) continue;
105109

106-
var record = new ContentRecordBuilder(_userService, _urlProvider, _algoliaSearchPropertyIndexValueFactory, _recordBuilderFactory)
110+
var record = new ContentRecordBuilder(_userService, _urlProvider, _algoliaSearchPropertyIndexValueFactory, _recordBuilderFactory, _umbracoContextFactory)
107111
.BuildFromContent(entity, (p) => indexConfiguration.Properties.Any(q => q.Alias == p.Alias))
108112
.Build();
109113

0 commit comments

Comments
 (0)