using Nop.Core.Domain.Customers; using Nop.Core.Domain.Messages; using Nop.Core.Domain.Orders; using Nop.Core.Domain.Stores; using Nop.Core.Events; using Nop.Services.Events; using Nop.Services.Messages; namespace Nop.Plugin.Misc.Brevo.Services; /// /// Represents event consumer /// public class EventConsumer : IConsumer, IConsumer, IConsumer>, IConsumer>, IConsumer>, IConsumer, IConsumer, IConsumer>, IConsumer> { #region Fields protected readonly BrevoManager _brevoEmailManager; protected readonly BrevoSettings _brevoSettings; protected readonly MarketingAutomationManager _marketingAutomationManager; #endregion #region Ctor public EventConsumer(BrevoManager brevoEmailManager, BrevoSettings brevoSettings, MarketingAutomationManager marketingAutomationManager) { _brevoEmailManager = brevoEmailManager; _brevoSettings = brevoSettings; _marketingAutomationManager = marketingAutomationManager; } #endregion #region Methods /// /// Handle the email unsubscribed event. /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(EmailUnsubscribedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //unsubscribe contact await _brevoEmailManager.UnsubscribeAsync(eventMessage.Subscription); } /// /// Handle the email subscribed event. /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(EmailSubscribedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //subscribe contact await _brevoEmailManager.SubscribeAsync(eventMessage.Subscription); } /// /// Handle the add shopping cart item event /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(EntityInsertedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //handle event await _marketingAutomationManager.HandleShoppingCartChangedEventAsync(eventMessage.Entity); } /// /// Handle the update shopping cart item event /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(EntityUpdatedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //handle event await _marketingAutomationManager.HandleShoppingCartChangedEventAsync(eventMessage.Entity); } /// /// Handle the delete shopping cart item event /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(EntityDeletedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //handle event await _marketingAutomationManager.HandleShoppingCartChangedEventAsync(eventMessage.Entity); } /// /// Handle the order paid event /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(OrderPaidEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //handle event await _marketingAutomationManager.HandleOrderCompletedEventAsync(eventMessage.Order); await _brevoEmailManager.UpdateContactAfterCompletingOrderAsync(eventMessage.Order); } /// /// Handle the order placed event /// /// The event message. /// A task that represents the asynchronous operation public async Task HandleEventAsync(OrderPlacedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return; //handle event await _marketingAutomationManager.HandleOrderPlacedEventAsync(eventMessage.Order); } /// /// Handle the store tokens added event /// /// The event message. /// A task that represents the asynchronous operation public Task HandleEventAsync(EntityTokensAddedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return Task.CompletedTask; //handle event eventMessage.Tokens.Add(new Token("Store.Id", eventMessage.Entity.Id)); return Task.CompletedTask; } /// /// Handle the customer tokens added event /// /// The event message. /// A task that represents the asynchronous operation public Task HandleEventAsync(EntityTokensAddedEvent eventMessage) { if (!BrevoManager.IsConfigured(_brevoSettings)) return Task.CompletedTask; //handle event eventMessage.Tokens.Add(new Token("Customer.PhoneNumber", eventMessage.Entity.Phone)); return Task.CompletedTask; } #endregion }