mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.9 KiB
49 lines
1.9 KiB
// ==========================================================================
|
|
// ContentChangedTriggerHandler.cs
|
|
// Squidex Headless CMS
|
|
// ==========================================================================
|
|
// Copyright (c) Squidex Group
|
|
// All rights reserved.
|
|
// ==========================================================================
|
|
|
|
using Squidex.Domain.Apps.Core.Contents;
|
|
using Squidex.Domain.Apps.Core.Rules.Triggers;
|
|
using Squidex.Domain.Apps.Events;
|
|
using Squidex.Domain.Apps.Events.Contents;
|
|
using Squidex.Infrastructure.CQRS.Events;
|
|
|
|
namespace Squidex.Domain.Apps.Core.HandleRules.Triggers
|
|
{
|
|
public sealed class ContentChangedTriggerHandler : RuleTriggerHandler<ContentChangedTrigger>
|
|
{
|
|
protected override bool Triggers(Envelope<AppEvent> @event, ContentChangedTrigger trigger)
|
|
{
|
|
if (trigger.Schemas != null && @event.Payload is SchemaEvent schemaEvent)
|
|
{
|
|
foreach (var schema in trigger.Schemas)
|
|
{
|
|
if (MatchsSchema(schema, schemaEvent) && MatchsType(schema, schemaEvent))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static bool MatchsSchema(ContentChangedTriggerSchema schema, SchemaEvent @event)
|
|
{
|
|
return @event.SchemaId.Id == schema.SchemaId;
|
|
}
|
|
|
|
private static bool MatchsType(ContentChangedTriggerSchema schema, SchemaEvent @event)
|
|
{
|
|
return
|
|
(schema.SendCreate && @event is ContentCreated) ||
|
|
(schema.SendUpdate && @event is ContentUpdated) ||
|
|
(schema.SendDelete && @event is ContentDeleted) ||
|
|
(schema.SendPublish && @event is ContentStatusChanged statusChanged && statusChanged.Status == Status.Published);
|
|
}
|
|
}
|
|
}
|
|
|