From 1a65f27ac184d9943b338556525ffa6f11761771 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 20 Aug 2025 14:26:37 +0100 Subject: [PATCH] Handle content blueprint server events (#19949) Handle content blueprint server events. --- .../ServerEventExtensions.cs | 3 +- .../ServerEvents/ServerEventSender.cs | 34 +++++++++++-------- src/Umbraco.Core/Constants-ServerEvents.cs | 5 ++- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/ServerEventExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/ServerEventExtensions.cs index 6089a1dc88..be9eab77e8 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/ServerEventExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/ServerEventExtensions.cs @@ -1,4 +1,4 @@ -using System.Text.Json.Serialization; +using System.Text.Json.Serialization; using Microsoft.Extensions.DependencyInjection; using Umbraco.Cms.Api.Management.ServerEvents; using Umbraco.Cms.Api.Management.ServerEvents.Authorizers; @@ -28,6 +28,7 @@ internal static class ServerEventExtensions private static IUmbracoBuilder AddEvents(this IUmbracoBuilder builder) { builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); diff --git a/src/Umbraco.Cms.Api.Management/ServerEvents/ServerEventSender.cs b/src/Umbraco.Cms.Api.Management/ServerEvents/ServerEventSender.cs index 4a53fb702b..59835f44e6 100644 --- a/src/Umbraco.Cms.Api.Management/ServerEvents/ServerEventSender.cs +++ b/src/Umbraco.Cms.Api.Management/ServerEvents/ServerEventSender.cs @@ -1,4 +1,4 @@ -using Umbraco.Cms.Core; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Models.Membership; @@ -10,6 +10,7 @@ namespace Umbraco.Cms.Api.Management.ServerEvents; internal sealed class ServerEventSender : INotificationAsyncHandler, + INotificationAsyncHandler, INotificationAsyncHandler, INotificationAsyncHandler, INotificationAsyncHandler, @@ -56,28 +57,30 @@ internal sealed class ServerEventSender : { private readonly IServerEventRouter _serverEventRouter; - public ServerEventSender(IServerEventRouter serverEventRouter) - { - _serverEventRouter = serverEventRouter; - } + public ServerEventSender(IServerEventRouter serverEventRouter) => _serverEventRouter = serverEventRouter; private async Task NotifySavedAsync(SavedNotification notification, string source) where T : IEntity { foreach (T entity in notification.SavedEntities) { - var eventModel = new ServerEvent - { - EventType = entity.CreateDate == entity.UpdateDate - ? Constants.ServerEvents.EventType.Created : Constants.ServerEvents.EventType.Updated, - Key = entity.Key, - EventSource = source, - }; - - await _serverEventRouter.RouteEventAsync(eventModel); + await RouteCreatedOrUpdatedEvent(source, entity); } } + private async Task RouteCreatedOrUpdatedEvent(string source, T entity) where T : IEntity + { + var eventModel = new ServerEvent + { + EventType = entity.CreateDate == entity.UpdateDate + ? Constants.ServerEvents.EventType.Created : Constants.ServerEvents.EventType.Updated, + Key = entity.Key, + EventSource = source, + }; + + await _serverEventRouter.RouteEventAsync(eventModel); + } + private async Task NotifyDeletedAsync(DeletedNotification notification, string source) where T : IEntity { @@ -109,6 +112,9 @@ internal sealed class ServerEventSender : public async Task HandleAsync(ContentSavedNotification notification, CancellationToken cancellationToken) => await NotifySavedAsync(notification, Constants.ServerEvents.EventSource.Document); + public async Task HandleAsync(ContentSavedBlueprintNotification notification, CancellationToken cancellationToken) => + await RouteCreatedOrUpdatedEvent(Constants.ServerEvents.EventSource.DocumentBlueprint, notification.SavedBlueprint); + public async Task HandleAsync(ContentTypeSavedNotification notification, CancellationToken cancellationToken) => await NotifySavedAsync(notification, Constants.ServerEvents.EventSource.DocumentType); diff --git a/src/Umbraco.Core/Constants-ServerEvents.cs b/src/Umbraco.Core/Constants-ServerEvents.cs index e84e62d350..0e2b066750 100644 --- a/src/Umbraco.Core/Constants-ServerEvents.cs +++ b/src/Umbraco.Core/Constants-ServerEvents.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Cms.Core; +namespace Umbraco.Cms.Core; public static partial class Constants { @@ -8,6 +8,8 @@ public static partial class Constants { public const string Document = "Umbraco:CMS:Document"; + public const string DocumentBlueprint = "Umbraco:CMS:DocumentBlueprint"; + public const string DocumentType = "Umbraco:CMS:DocumentType"; public const string Media = "Umbraco:CMS:Media"; @@ -53,6 +55,7 @@ public static partial class Constants public static class EventType { + // TODO (V17): Convert these statics to consts. public static string Created = "Created"; public static string Updated = "Updated";