// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System; using System.Runtime.Serialization; using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Events; using Squidex.Domain.Apps.Events.Rules; using Squidex.Infrastructure; using Squidex.Infrastructure.Dispatching; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.States; #pragma warning disable IDE0060 // Remove unused parameter namespace Squidex.Domain.Apps.Entities.Rules.State { [CollectionName("Rules")] public class RuleState : DomainObjectState, IRuleEntity { [DataMember] public NamedId AppId { get; set; } [DataMember] public Rule RuleDef { get; set; } [DataMember] public bool IsDeleted { get; set; } protected void On(RuleCreated @event) { RuleDef = new Rule(@event.Trigger, @event.Action); AppId = @event.AppId; } protected void On(RuleUpdated @event) { if (@event.Trigger != null) { RuleDef = RuleDef.Update(@event.Trigger); } if (@event.Action != null) { RuleDef = RuleDef.Update(@event.Action); } } protected void On(RuleEnabled @event) { RuleDef = RuleDef.Enable(); } protected void On(RuleDisabled @event) { RuleDef = RuleDef.Disable(); } protected void On(RuleDeleted @event) { IsDeleted = true; } public override RuleState Apply(Envelope @event) { var payload = (SquidexEvent)@event.Payload; return Clone().Update(payload, @event.Headers, r => r.DispatchAction(payload)); } } }