diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Webhook/EventsWebhookController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Webhook/EventsWebhookController.cs new file mode 100644 index 0000000000..84e48a262a --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Webhook/EventsWebhookController.cs @@ -0,0 +1,41 @@ +using Asp.Versioning; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Common.ViewModels.Pagination; +using Umbraco.Cms.Api.Management.ViewModels.Webhook; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Core.Webhooks; + +namespace Umbraco.Cms.Api.Management.Controllers.Webhook; + +[ApiVersion("1.0")] +public class EventsWebhookController : WebhookControllerBase +{ + private readonly IUmbracoMapper _umbracoMapper; + private readonly WebhookEventCollection _webhookEventCollection; + + public EventsWebhookController(IUmbracoMapper umbracoMapper, WebhookEventCollection webhookEventCollection) + { + _umbracoMapper = umbracoMapper; + _webhookEventCollection = webhookEventCollection; + } + + [HttpGet("events")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] + public Task>> All( + CancellationToken cancellationToken, + int skip = 0, + int take = 100) + { + List events = _umbracoMapper.MapEnumerable(_webhookEventCollection.AsEnumerable()); + + var pagedModel = new PagedViewModel + { + Items = events.Skip(skip).Take(take), + Total = events.Count, + }; + + return Task.FromResult>>(Ok(pagedModel)); + } +} diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/WebhooksBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/WebhooksBuilderExtensions.cs index 74cbe680a9..8d2d20a1d6 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/WebhooksBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/WebhooksBuilderExtensions.cs @@ -1,4 +1,5 @@ using Umbraco.Cms.Api.Management.Factories; +using Umbraco.Cms.Api.Management.Mapping.Webhook; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Extensions; @@ -9,6 +10,7 @@ internal static class WebhooksBuilderExtensions internal static IUmbracoBuilder AddWebhooks(this IUmbracoBuilder builder) { builder.Services.AddUnique(); + builder.AddMapDefinition(); return builder; } diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Webhook/WebhookEventMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Webhook/WebhookEventMapDefinition.cs new file mode 100644 index 0000000000..9a25bf5108 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Mapping/Webhook/WebhookEventMapDefinition.cs @@ -0,0 +1,18 @@ +using Umbraco.Cms.Api.Management.ViewModels.Webhook; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Core.Webhooks; + +namespace Umbraco.Cms.Api.Management.Mapping.Webhook; + +public class WebhookEventMapDefinition : IMapDefinition +{ + public void DefineMaps(IUmbracoMapper mapper) => mapper.Define((_, _) => new WebhookEventViewModel(), Map); + + // Umbraco.Code.MapAll + private void Map(IWebhookEvent source, WebhookEventViewModel target, MapperContext context) + { + target.EventName = source.EventName; + target.EventType = source.EventType; + target.Alias = source.Alias; + } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Webhook/WebhookEventViewModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Webhook/WebhookEventViewModel.cs new file mode 100644 index 0000000000..7e330eb15e --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Webhook/WebhookEventViewModel.cs @@ -0,0 +1,10 @@ +namespace Umbraco.Cms.Api.Management.ViewModels.Webhook; + +public class WebhookEventViewModel +{ + public string EventName { get; set; } = string.Empty; + + public string EventType { get; set; } = string.Empty; + + public string Alias { get; set; } = string.Empty; +}