Files
Umbraco-CMS/src/Umbraco.Core/DeliveryApi/ApiContentBuilderBase.cs
2023-06-26 08:33:16 +03:00

42 lines
1.6 KiB
C#

using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
namespace Umbraco.Cms.Core.DeliveryApi;
public abstract class ApiContentBuilderBase<T>
where T : IApiContent
{
private readonly IApiContentNameProvider _apiContentNameProvider;
private readonly IApiContentRouteBuilder _apiContentRouteBuilder;
private readonly IOutputExpansionStrategyAccessor _outputExpansionStrategyAccessor;
protected ApiContentBuilderBase(IApiContentNameProvider apiContentNameProvider, IApiContentRouteBuilder apiContentRouteBuilder, IOutputExpansionStrategyAccessor outputExpansionStrategyAccessor)
{
_apiContentNameProvider = apiContentNameProvider;
_apiContentRouteBuilder = apiContentRouteBuilder;
_outputExpansionStrategyAccessor = outputExpansionStrategyAccessor;
}
protected abstract T Create(IPublishedContent content, string name, IApiContentRoute route, IDictionary<string, object?> properties);
public virtual T? Build(IPublishedContent content)
{
IApiContentRoute? route = _apiContentRouteBuilder.Build(content);
if (route is null)
{
return default;
}
IDictionary<string, object?> properties =
_outputExpansionStrategyAccessor.TryGetValue(out IOutputExpansionStrategy? outputExpansionStrategy)
? outputExpansionStrategy.MapContentProperties(content)
: new Dictionary<string, object?>();
return Create(
content,
_apiContentNameProvider.GetName(content),
route,
properties);
}
}