Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V15: Remove Nucache #17166

Merged
merged 71 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
e22c9ef
Remove nucache reference from Web.Common
nikolajlauridsen Sep 23, 2024
3fb022c
Get tests building-ish
nikolajlauridsen Sep 23, 2024
3ab7f73
Move ReservedFieldNamesService to the right project
nikolajlauridsen Sep 23, 2024
e51113b
Remove IPublishedSnapshotStatus
nikolajlauridsen Sep 23, 2024
07dceb3
Added functionality to the INavigationQueryService to get root keys
bergmania Sep 4, 2024
6b8bb26
Fixed issue with navigation
bergmania Sep 9, 2024
40ba4c2
Remove IPublishedSnapshot from UmbracoContext
nikolajlauridsen Sep 23, 2024
1f85ba7
Begin removing usage of IPublishedSnapshot from PublishedContentExten…
nikolajlauridsen Sep 23, 2024
52e8fef
Fix PublishedContentExtensions.cs
nikolajlauridsen Sep 24, 2024
d81e714
Merge branch 'v15/dev' into v15/feature/remove-nucache
nikolajlauridsen Sep 24, 2024
8b9edb7
Don't use snapshots in delivery media api
nikolajlauridsen Sep 24, 2024
bc068e3
Use IPublishedMediaCache in QueryMediaApiController
nikolajlauridsen Sep 24, 2024
29671e5
Remove more usages of IPublishedSnapshotAccessor
nikolajlauridsen Sep 24, 2024
120ead7
Comment out tests
nikolajlauridsen Sep 24, 2024
42d1956
Remove more usages of PublishedSnapshotAccessor
nikolajlauridsen Sep 24, 2024
e624a1d
Remove PublishedSnapshot from property
nikolajlauridsen Sep 24, 2024
07f4e9e
Fixed test build
bergmania Sep 24, 2024
2e8d47a
Fix errors
nikolajlauridsen Sep 24, 2024
828de3e
Fix some tests
nikolajlauridsen Sep 24, 2024
797bd4e
Delete NuCache 🎉
nikolajlauridsen Sep 24, 2024
0da2ad9
Implement DatabaseCacheRebuilder
nikolajlauridsen Sep 24, 2024
4c89d69
Remove usage of IPublishedSnapshotService
nikolajlauridsen Sep 24, 2024
0930833
Remove IPublishedSnapshotService
nikolajlauridsen Sep 24, 2024
29cfa28
Remove TestPublishedSnapshotAccessor and make tests build
nikolajlauridsen Sep 25, 2024
f2c9b7c
Don't test Snapshot cachelevel
nikolajlauridsen Sep 25, 2024
42b21fe
Fix BlockEditorConverter
nikolajlauridsen Sep 25, 2024
7c1c9f1
Remember to set cachemanager
nikolajlauridsen Sep 25, 2024
96869a1
Fix RichTextParserTests
nikolajlauridsen Sep 25, 2024
6cb15d9
Implement TryGetLevel on INavigationQueryService
nikolajlauridsen Sep 25, 2024
0fdfd59
Fake level and obsolete it in PublishedContent
nikolajlauridsen Sep 25, 2024
b6c27cc
Remove ChildrenForAllCultures
nikolajlauridsen Sep 25, 2024
a63e8f6
Hack Path property on PublishedContent
nikolajlauridsen Sep 25, 2024
69b749b
Merge branch 'refs/heads/v15/dev' into v15/feature/remove-nucache
nikolajlauridsen Sep 25, 2024
9bceaed
Remove usages of IPublishedSnapshot in tests
nikolajlauridsen Sep 25, 2024
0f9fd0d
More ConvertersTests
nikolajlauridsen Sep 25, 2024
cc849ad
Add hybrid cache to integration tests
nikolajlauridsen Sep 26, 2024
fb3c16b
Merge remote-tracking branch 'origin/v15/dev' into v15/feature/remove…
nikolajlauridsen Sep 27, 2024
f4a5155
Rename IPublishedSnapshotRebuilder to ICacheRebuilder
nikolajlauridsen Sep 27, 2024
298cacf
Comment out tests
nikolajlauridsen Sep 27, 2024
8c685a2
V15: Replacing the usages of Parent (navigation data) from IPublished…
elit0451 Sep 30, 2024
3a928d5
Remove usage of IPublishedSnapshotAccessor from IRequestItemProvider
nikolajlauridsen Sep 30, 2024
aae5d4e
Merge branch 'v15/dev' into v15/feature/remove-nucache
nikolajlauridsen Sep 30, 2024
4db8d6a
Post merge fixup
nikolajlauridsen Sep 30, 2024
977e0b0
Remo IPublishedSnapshot
nikolajlauridsen Sep 30, 2024
b759779
Add HasAny to IDocumentUrlService
nikolajlauridsen Sep 30, 2024
7a96806
Fix TextBuilder
nikolajlauridsen Sep 30, 2024
647608c
Fix modelsbuilder tests
nikolajlauridsen Sep 30, 2024
e3bb067
Use explicit types
nikolajlauridsen Sep 30, 2024
72dcb75
Implement GetByContentType
nikolajlauridsen Sep 30, 2024
65117d0
Support element types in PublishedContentTypeCache
kjac Sep 30, 2024
52ba516
Merge remote-tracking branch 'origin/v15/feature/remove-nucache' into…
nikolajlauridsen Sep 30, 2024
235402c
Run enlistments before publishing notifications
nikolajlauridsen Sep 30, 2024
1f9d6e7
Fix elements cache refreshing
nikolajlauridsen Sep 30, 2024
1e52db3
Implement GetByUdi
nikolajlauridsen Sep 30, 2024
ef51bb9
Implement GetAtRoot
nikolajlauridsen Sep 30, 2024
90655c0
Implement GetByRoute
nikolajlauridsen Sep 30, 2024
efc03e0
Reimplement GetRouteById
nikolajlauridsen Sep 30, 2024
f7bcd8b
Merge remote-tracking branch 'origin/v15/dev' into v15/feature/remove…
bergmania Sep 30, 2024
9cd83b3
Fix blocks unit tests
kjac Sep 30, 2024
1a6c018
Merge remote-tracking branch 'origin/v15/feature/remove-nucache' into…
bergmania Sep 30, 2024
a1d7099
Initialize domain cache on boot
bergmania Oct 1, 2024
9512b48
Only return routes with domains on non default lanauges
bergmania Oct 1, 2024
fb37f4f
Merge branch 'v15/dev' into v15/feature/remove-nucache
nikolajlauridsen Oct 1, 2024
6ec8281
V15: Replacing the usages of `Children` (navigation data) from `IPubl…
elit0451 Oct 1, 2024
8c4fdbd
Fix issue with delete language
bergmania Oct 1, 2024
1907f8e
Update nuget pacakges
bergmania Oct 1, 2024
5f1d79f
Clear elements cache when content is deleted
nikolajlauridsen Oct 1, 2024
c96c9b3
Reset publishedModelFactory
nikolajlauridsen Oct 1, 2024
29ff454
Fixed publishing
bergmania Oct 1, 2024
9a86f03
Merge remote-tracking branch 'origin/v15/feature/remove-nucache' into…
bergmania Oct 1, 2024
bb755b0
Remove Platform attribute failing tests
nikolajlauridsen Oct 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@
<PackageVersion Include="Dazinator.Extensions.FileProviders" Version="2.0.0" />
<PackageVersion Include="Examine" Version="3.3.0" />
<PackageVersion Include="Examine.Core" Version="3.3.0" />
<PackageVersion Include="HtmlAgilityPack" Version="1.11.66" />
<PackageVersion Include="HtmlAgilityPack" Version="1.11.67" />
<PackageVersion Include="JsonPatch.Net" Version="3.1.1" />
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
<PackageVersion Include="MailKit" Version="4.7.1.1" />
<PackageVersion Include="MailKit" Version="4.8.0" />
<PackageVersion Include="Markdown" Version="2.2.1" />
<PackageVersion Include="MessagePack" Version="2.5.172" />
<PackageVersion Include="MiniProfiler.AspNetCore.Mvc" Version="4.3.8" />
Expand All @@ -61,7 +61,7 @@
<PackageVersion Include="OpenIddict.Abstractions" Version="5.8.0" />
<PackageVersion Include="OpenIddict.AspNetCore" Version="5.8.0" />
<PackageVersion Include="OpenIddict.EntityFrameworkCore" Version="5.8.0" />
<PackageVersion Include="Serilog" Version="4.0.1" />
<PackageVersion Include="Serilog" Version="4.0.2" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.2" />
<PackageVersion Include="Serilog.Enrichers.Process" Version="3.0.0" />
<PackageVersion Include="Serilog.Enrichers.Thread" Version="4.0.0" />
Expand All @@ -75,12 +75,12 @@
<PackageVersion Include="Serilog.Sinks.Map" Version="2.0.0" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.5" />
<PackageVersion Include="SixLabors.ImageSharp.Web" Version="3.1.3" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.8.0" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.8.1" />
</ItemGroup>
<!-- Transitive pinned versions (only required because our direct dependencies have vulnerable versions of transitive dependencies) -->
<ItemGroup>
<!-- Both Microsoft.EntityFrameworkCore.SqlServer and NPoco.SqlServer bring in a vulnerable version of Azure.Identity -->
<PackageVersion Include="Azure.Identity" Version="1.12.0" />
<PackageVersion Include="Azure.Identity" Version="1.12.1" />
<!-- Dazinator.Extensions.FileProviders brings in a vulnerable version of System.Net.Http -->
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<!-- Examine brings in a vulnerable version of System.Security.Cryptography.Xml -->
Expand All @@ -91,7 +91,6 @@
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.1.0" />
<!-- Both Azure.Identity, Microsoft.EntityFrameworkCore.SqlServer, Dazinator.Extensions.FileProviders bring in legacy versions of System.Text.Encodings.Web -->
<PackageVersion Include="System.Text.Encodings.Web" Version="8.0.0" />

<!-- NPoco.SqlServer bring in vulnerable version of Microsoft.Data.SqlClient -->
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@ namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[ApiVersion("2.0")]
public class ByIdMediaApiController : MediaApiControllerBase
{
public ByIdMediaApiController(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
public ByIdMediaApiController(
IPublishedMediaCache publishedMediaCache,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedMediaCache, apiMediaWithCropsResponseBuilder)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[ApiVersion("2.0")]
public class ByIdsMediaApiController : MediaApiControllerBase
{
public ByIdsMediaApiController(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
public ByIdsMediaApiController(IPublishedMediaCache publishedMediaCache, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedMediaCache, apiMediaWithCropsResponseBuilder)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ public class ByPathMediaApiController : MediaApiControllerBase
private readonly IApiMediaQueryService _apiMediaQueryService;

public ByPathMediaApiController(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IPublishedMediaCache publishedMediaCache,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder,
IApiMediaQueryService apiMediaQueryService)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
: base(publishedMediaCache, apiMediaWithCropsResponseBuilder)
=> _apiMediaQueryService = apiMediaQueryService;

[HttpGet("item/{*path}")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,15 @@ namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
public abstract class MediaApiControllerBase : DeliveryApiControllerBase
{
private readonly IApiMediaWithCropsResponseBuilder _apiMediaWithCropsResponseBuilder;
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private IPublishedMediaCache? _publishedMediaCache;
private IPublishedMediaCache _publishedMediaCache;

protected MediaApiControllerBase(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
protected MediaApiControllerBase(IPublishedMediaCache publishedMediaCache, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_publishedMediaCache = publishedMediaCache;
_apiMediaWithCropsResponseBuilder = apiMediaWithCropsResponseBuilder;
}

protected IPublishedMediaCache PublishedMediaCache => _publishedMediaCache
??= _publishedSnapshotAccessor.GetRequiredPublishedSnapshot().Media
?? throw new InvalidOperationException("Could not obtain the published media cache");
protected IPublishedMediaCache PublishedMediaCache => _publishedMediaCache;

protected IApiMediaWithCropsResponse BuildApiMediaWithCrops(IPublishedContent media)
=> _apiMediaWithCropsResponseBuilder.Build(media);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ public class QueryMediaApiController : MediaApiControllerBase
private readonly IApiMediaQueryService _apiMediaQueryService;

public QueryMediaApiController(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IPublishedMediaCache publishedMediaCache,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder,
IApiMediaQueryService apiMediaQueryService)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
: base(publishedMediaCache, apiMediaWithCropsResponseBuilder)
=> _apiMediaQueryService = apiMediaQueryService;

[HttpGet]
Expand Down
11 changes: 5 additions & 6 deletions src/Umbraco.Cms.Api.Delivery/Querying/QueryOptionBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ namespace Umbraco.Cms.Api.Delivery.Querying;

public abstract class QueryOptionBase
{
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IPublishedContentCache _publishedContentCache;
private readonly IRequestRoutingService _requestRoutingService;


public QueryOptionBase(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IPublishedContentCache publishedContentCache,
IRequestRoutingService requestRoutingService)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_publishedContentCache = publishedContentCache;
_requestRoutingService = requestRoutingService;
}

Expand All @@ -30,11 +31,9 @@ public QueryOptionBase(
return id;
}

IPublishedSnapshot publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();

// Check if the passed value is a path of a content item
var contentRoute = _requestRoutingService.GetContentRoute(queryStringValue);
IPublishedContent? contentItem = publishedSnapshot.Content?.GetByRoute(contentRoute);
IPublishedContent? contentItem = _publishedContentCache.GetByRoute(contentRoute);

return contentItem?.Key;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Api.Delivery.Indexing.Selectors;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services.Navigation;
using Umbraco.Extensions;

namespace Umbraco.Cms.Api.Delivery.Querying.Selectors;

public sealed class AncestorsSelector : QueryOptionBase, ISelectorHandler
{
private readonly IPublishedContentCache _publishedContentCache;
private readonly IDocumentNavigationQueryService _navigationQueryService;
private const string AncestorsSpecifier = "ancestors:";
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;

public AncestorsSelector(IPublishedSnapshotAccessor publishedSnapshotAccessor, IRequestRoutingService requestRoutingService)
: base(publishedSnapshotAccessor, requestRoutingService) =>
_publishedSnapshotAccessor = publishedSnapshotAccessor;
public AncestorsSelector(
IPublishedContentCache publishedContentCache,
IRequestRoutingService requestRoutingService,
IDocumentNavigationQueryService navigationQueryService)
: base(publishedContentCache, requestRoutingService)
{
_publishedContentCache = publishedContentCache;
_navigationQueryService = navigationQueryService;
}

[Obsolete("Use the constructor that takes all parameters. Scheduled for removal in V17.")]
public AncestorsSelector(IPublishedContentCache publishedContentCache, IRequestRoutingService requestRoutingService)
: this(publishedContentCache, requestRoutingService, StaticServiceProvider.Instance.GetRequiredService<IDocumentNavigationQueryService>())
{
}

/// <inheritdoc />
public bool CanHandle(string query)
Expand All @@ -37,12 +53,10 @@ public SelectorOption BuildSelectorOption(string selector)
};
}

IPublishedSnapshot publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();

IPublishedContent contentItem = publishedSnapshot.Content?.GetById((Guid)id)
IPublishedContent contentItem = _publishedContentCache.GetById((Guid)id)
?? throw new InvalidOperationException("Could not obtain the content cache");

var ancestorKeys = contentItem.Ancestors().Select(a => a.Key.ToString("D")).ToArray();
var ancestorKeys = contentItem.Ancestors(_publishedContentCache, _navigationQueryService).Select(a => a.Key.ToString("D")).ToArray();

return new SelectorOption
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ public sealed class ChildrenSelector : QueryOptionBase, ISelectorHandler
{
private const string ChildrenSpecifier = "children:";

public ChildrenSelector(IPublishedSnapshotAccessor publishedSnapshotAccessor, IRequestRoutingService requestRoutingService)
: base(publishedSnapshotAccessor, requestRoutingService)
public ChildrenSelector(IPublishedContentCache publishedContentCache, IRequestRoutingService requestRoutingService)
: base(publishedContentCache, requestRoutingService)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ public sealed class DescendantsSelector : QueryOptionBase, ISelectorHandler
{
private const string DescendantsSpecifier = "descendants:";

public DescendantsSelector(IPublishedSnapshotAccessor publishedSnapshotAccessor, IRequestRoutingService requestRoutingService)
: base(publishedSnapshotAccessor, requestRoutingService)
public DescendantsSelector(IPublishedContentCache publishedContentCache, IRequestRoutingService requestRoutingService)
: base(publishedContentCache, requestRoutingService)
{
}

Expand Down
16 changes: 9 additions & 7 deletions src/Umbraco.Cms.Api.Delivery/Services/ApiMediaQueryService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services.Navigation;
using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Extensions;

Expand All @@ -12,13 +13,15 @@ namespace Umbraco.Cms.Api.Delivery.Services;
/// <inheritdoc />
internal sealed class ApiMediaQueryService : IApiMediaQueryService
{
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IPublishedMediaCache _publishedMediaCache;
private readonly ILogger<ApiMediaQueryService> _logger;
private readonly IMediaNavigationQueryService _mediaNavigationQueryService;

public ApiMediaQueryService(IPublishedSnapshotAccessor publishedSnapshotAccessor, ILogger<ApiMediaQueryService> logger)
public ApiMediaQueryService(IPublishedMediaCache publishedMediaCache, ILogger<ApiMediaQueryService> logger, IMediaNavigationQueryService mediaNavigationQueryService)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_publishedMediaCache = publishedMediaCache;
_logger = logger;
_mediaNavigationQueryService = mediaNavigationQueryService;
}

/// <inheritdoc/>
Expand Down Expand Up @@ -52,8 +55,7 @@ public Attempt<PagedModel<Guid>, ApiMediaQueryOperationStatus> ExecuteQuery(stri
=> TryGetByPath(path, GetRequiredPublishedMediaCache());

private IPublishedMediaCache GetRequiredPublishedMediaCache()
=> _publishedSnapshotAccessor.GetRequiredPublishedSnapshot().Media
?? throw new InvalidOperationException("Could not obtain the published media cache");
=> _publishedMediaCache;

private IPublishedContent? TryGetByPath(string path, IPublishedMediaCache mediaCache)
{
Expand All @@ -69,7 +71,7 @@ private IPublishedMediaCache GetRequiredPublishedMediaCache()
break;
}

currentChildren = resolvedMedia.Children;
currentChildren = resolvedMedia.Children(null, _publishedMediaCache, _mediaNavigationQueryService);
}

return resolvedMedia;
Expand Down Expand Up @@ -102,7 +104,7 @@ private IPublishedMediaCache GetRequiredPublishedMediaCache()
? mediaCache.GetById(parentKey)
: TryGetByPath(childrenOf, mediaCache);

return parent?.Children ?? Array.Empty<IPublishedContent>();
return parent?.Children(null, _publishedMediaCache, _mediaNavigationQueryService) ?? Array.Empty<IPublishedContent>();
}

private IEnumerable<IPublishedContent>? ApplyFilters(IEnumerable<IPublishedContent> source, IEnumerable<string> filters)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ internal sealed class RequestRedirectService : RoutingServiceBase, IRequestRedir
private readonly GlobalSettings _globalSettings;

public RequestRedirectService(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDomainCache domainCache,
IHttpContextAccessor httpContextAccessor,
IRequestStartItemProviderAccessor requestStartItemProviderAccessor,
IRequestCultureService requestCultureService,
IRedirectUrlService redirectUrlService,
IApiPublishedContentCache apiPublishedContentCache,
IApiContentRouteBuilder apiContentRouteBuilder,
IOptions<GlobalSettings> globalSettings)
: base(publishedSnapshotAccessor, httpContextAccessor, requestStartItemProviderAccessor)
: base(domainCache, httpContextAccessor, requestStartItemProviderAccessor)
{
_requestCultureService = requestCultureService;
_redirectUrlService = redirectUrlService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Http;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Routing;
Expand All @@ -12,11 +13,11 @@ internal sealed class RequestRoutingService : RoutingServiceBase, IRequestRoutin
private readonly IRequestCultureService _requestCultureService;

public RequestRoutingService(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDomainCache domainCache,
IHttpContextAccessor httpContextAccessor,
IRequestStartItemProviderAccessor requestStartItemProviderAccessor,
IRequestCultureService requestCultureService)
: base(publishedSnapshotAccessor, httpContextAccessor, requestStartItemProviderAccessor) =>
: base(domainCache, httpContextAccessor, requestStartItemProviderAccessor) =>
_requestCultureService = requestCultureService;

/// <inheritdoc />
Expand Down
25 changes: 14 additions & 11 deletions src/Umbraco.Cms.Api.Delivery/Services/RequestStartItemProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,34 @@
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services.Navigation;
using Umbraco.Extensions;

namespace Umbraco.Cms.Api.Delivery.Services;

internal sealed class RequestStartItemProvider : RequestHeaderHandler, IRequestStartItemProvider
{
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IVariationContextAccessor _variationContextAccessor;
private readonly IRequestPreviewService _requestPreviewService;
private readonly IDocumentNavigationQueryService _documentNavigationQueryService;
private readonly IPublishedContentCache _publishedContentCache;

// this provider lifetime is Scope, so we can cache this as a field
private IPublishedContent? _requestedStartContent;

public RequestStartItemProvider(
IHttpContextAccessor httpContextAccessor,
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IVariationContextAccessor variationContextAccessor,
IRequestPreviewService requestPreviewService)
IRequestPreviewService requestPreviewService,
IDocumentNavigationQueryService documentNavigationQueryService,
IPublishedContentCache publishedContentCache)
: base(httpContextAccessor)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;

_variationContextAccessor = variationContextAccessor;
_requestPreviewService = requestPreviewService;
_documentNavigationQueryService = documentNavigationQueryService;
_publishedContentCache = publishedContentCache;
}

/// <inheritdoc/>
Expand All @@ -42,13 +47,11 @@ public RequestStartItemProvider(
return null;
}

if (_publishedSnapshotAccessor.TryGetPublishedSnapshot(out IPublishedSnapshot? publishedSnapshot) == false ||
publishedSnapshot?.Content == null)
{
return null;
}

IEnumerable<IPublishedContent> rootContent = publishedSnapshot.Content.GetAtRoot(_requestPreviewService.IsPreview());
_documentNavigationQueryService.TryGetRootKeys(out IEnumerable<Guid> rootKeys);
IEnumerable<IPublishedContent> rootContent = rootKeys
.Select(_publishedContentCache.GetById)
.WhereNotNull()
.Where(x => x.IsPublished() != _requestPreviewService.IsPreview());

_requestedStartContent = Guid.TryParse(headerValue, out Guid key)
? rootContent.FirstOrDefault(c => c.Key == key)
Expand Down
Loading
Loading