// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Collections.Generic; using System.Threading.Tasks; using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; namespace Squidex.Domain.Apps.Entities.History { public abstract class HistoryEventsCreatorBase : IHistoryEventsCreator { private readonly Dictionary texts = new Dictionary(); private readonly TypeNameRegistry typeNameRegistry; public IReadOnlyDictionary Texts { get { return texts; } } protected HistoryEventsCreatorBase(TypeNameRegistry typeNameRegistry) { Guard.NotNull(typeNameRegistry, nameof(typeNameRegistry)); this.typeNameRegistry = typeNameRegistry; } protected void AddEventMessage(string message) where TEvent : IEvent { Guard.NotNullOrEmpty(message, nameof(message)); texts[typeNameRegistry.GetName()] = message; } protected void AddEventMessage(string type, string message) { Guard.NotNullOrEmpty(message, nameof(message)); texts[type] = message; } protected bool HasEventText(IEvent @event) { var message = typeNameRegistry.GetName(@event.GetType()); return texts.ContainsKey(message); } protected HistoryEventToStore ForEvent(IEvent @event, string channel) { var message = typeNameRegistry.GetName(@event.GetType()); return new HistoryEventToStore(channel, message); } public Task CreateEventAsync(Envelope @event) { if (HasEventText(@event.Payload)) { return CreateEventCoreAsync(@event); } return Task.FromResult(null); } protected abstract Task CreateEventCoreAsync(Envelope @event); } }