diff --git a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs index af886ca88..e65f9ca56 100644 --- a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs +++ b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs @@ -13,5 +13,6 @@ namespace Squidex.Domain.Apps.Events.Webhooks [TypeName("WebhookCreatedEvent")] public sealed class WebhookCreated : WebhookEditEvent { + public string SharedSecret { get; set; } } } diff --git a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs index 57b8c2e01..c958c8272 100644 --- a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs +++ b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs @@ -10,7 +10,7 @@ using Squidex.Infrastructure; namespace Squidex.Domain.Apps.Events.Webhooks { - [TypeName("WebhookDeletedEvent")] + [TypeName("WebhookDeletedEventV2")] public sealed class WebhookDeleted : WebhookEvent { } diff --git a/src/Squidex.Domain.Apps.Write/Webhooks/WebhookCommandMiddleware.cs b/src/Squidex.Domain.Apps.Write/Webhooks/WebhookCommandMiddleware.cs index 8d8fa71b3..611cfeb7a 100644 --- a/src/Squidex.Domain.Apps.Write/Webhooks/WebhookCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Write/Webhooks/WebhookCommandMiddleware.cs @@ -35,7 +35,7 @@ namespace Squidex.Domain.Apps.Write.Webhooks { await ValidateAsync(command, () => "Failed to create webhook"); - await handler.UpdateAsync(context, c => c.Create(command)); + await handler.CreateAsync(context, c => c.Create(command)); } protected async Task On(UpdateWebhook command, CommandContext context) diff --git a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs index e61372ba1..6d4a946eb 100644 --- a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs +++ b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectFactory.cs @@ -27,6 +27,11 @@ namespace Squidex.Infrastructure.CQRS.Commands { var factoryFunction = (DomainObjectFactoryFunction)serviceProvider.GetService(typeof(DomainObjectFactoryFunction)); + if (factoryFunction == null) + { + throw new InvalidOperationException($"No factory registered for {typeof(T)}"); + } + var domainObject = factoryFunction.Invoke(id); if (domainObject.Version != -1) diff --git a/src/Squidex/Config/Domain/WriteModule.cs b/src/Squidex/Config/Domain/WriteModule.cs index 0192fdd6c..db7ff6310 100644 --- a/src/Squidex/Config/Domain/WriteModule.cs +++ b/src/Squidex/Config/Domain/WriteModule.cs @@ -13,6 +13,7 @@ using Squidex.Domain.Apps.Write.Apps; using Squidex.Domain.Apps.Write.Assets; using Squidex.Domain.Apps.Write.Contents; using Squidex.Domain.Apps.Write.Schemas; +using Squidex.Domain.Apps.Write.Webhooks; using Squidex.Infrastructure.CQRS.Commands; using Squidex.Pipeline.CommandHandlers; @@ -71,6 +72,10 @@ namespace Squidex.Config.Domain .As() .SingleInstance(); + builder.RegisterType() + .As() + .SingleInstance(); + builder.RegisterType() .As() .SingleInstance(); @@ -87,6 +92,10 @@ namespace Squidex.Config.Domain .AsSelf() .SingleInstance(); + builder.Register>(c => (id => new WebhookDomainObject(id, -1))) + .AsSelf() + .SingleInstance(); + builder.Register>(c => { var fieldRegistry = c.Resolve(); diff --git a/src/Squidex/Controllers/Api/Webhooks/WebhooksController.cs b/src/Squidex/Controllers/Api/Webhooks/WebhooksController.cs index ff2791ab7..775f2f76e 100644 --- a/src/Squidex/Controllers/Api/Webhooks/WebhooksController.cs +++ b/src/Squidex/Controllers/Api/Webhooks/WebhooksController.cs @@ -99,7 +99,7 @@ namespace Squidex.Controllers.Api.Webhooks var context = await CommandBus.PublishAsync(command); var result = context.Result>(); - var response = new EntityCreatedDto { Id = result.IdOrValue.ToString(), Version = result.Version }; + var response = new WebhookCreatedDto { Id = result.IdOrValue, SharedSecret = command.SharedSecret, Version = result.Version }; return CreatedAtAction(nameof(GetWebhooks), new { app }, response); } @@ -113,7 +113,7 @@ namespace Squidex.Controllers.Api.Webhooks /// /// 203 => Webhook updated. /// 400 => Webhook is not valid. - /// 404 => App or webhook not found. + /// 404 => Webhook or app not found. /// /// /// All events for the specified schemas will be sent to the url. The timeout is 2 seconds. @@ -140,10 +140,10 @@ namespace Squidex.Controllers.Api.Webhooks /// The id of the webhook to delete. /// /// 204 => Webhook has been deleted. - /// 404 => Webhook or shema or app not found. + /// 404 => Webhook or app not found. /// [HttpDelete] - [Route("apps/{app}//webhooks/{id}")] + [Route("apps/{app}/webhooks/{id}")] [ApiCosts(1)] public async Task DeleteWebhook(string app, Guid id) { diff --git a/src/Squidex/app/features/webhooks/declarations.ts b/src/Squidex/app/features/webhooks/declarations.ts index efa547db3..84b17769c 100644 --- a/src/Squidex/app/features/webhooks/declarations.ts +++ b/src/Squidex/app/features/webhooks/declarations.ts @@ -6,4 +6,5 @@ */ export * from './pages/webhook-events-page.component'; +export * from './pages/webhook.component'; export * from './pages/webhooks-page.component'; \ No newline at end of file diff --git a/src/Squidex/app/features/webhooks/module.ts b/src/Squidex/app/features/webhooks/module.ts index 58298cbef..12a58e960 100644 --- a/src/Squidex/app/features/webhooks/module.ts +++ b/src/Squidex/app/features/webhooks/module.ts @@ -15,6 +15,7 @@ import { } from 'shared'; import { + WebhookComponent, WebhookEventsPageComponent, WebhooksPageComponent } from './declarations'; @@ -46,6 +47,7 @@ const routes: Routes = [ RouterModule.forChild(routes) ], declarations: [ + WebhookComponent, WebhookEventsPageComponent, WebhooksPageComponent ] diff --git a/src/Squidex/app/features/webhooks/pages/webhooks-page.component.html b/src/Squidex/app/features/webhooks/pages/webhooks-page.component.html index 5368acec3..016af3385 100644 --- a/src/Squidex/app/features/webhooks/pages/webhooks-page.component.html +++ b/src/Squidex/app/features/webhooks/pages/webhooks-page.component.html @@ -26,96 +26,18 @@
-
-
- - - - - - - - - - - - - - - - - - - - - -
-

- Schema: {{w.schema.name}} -

-
- -
Url: - - - -
Secret: - - - -
- -
-
-
- - {{w.webhook.totalSucceeded}} - -
-
- - {{w.webhook.totalFailed}} - -
-
- - {{w.webhook.totalTimedout}} - -
-
- - {{w.webhook.averageRequestTimeMs}} ms - -
-
-
-
-
+