Try your search with a different keyword or use * as a wildcard.
using Nop.Core;
using Nop.Core.Caching;
using Nop.Core.Events;
using Nop.Core.Infrastructure;
using Nop.Services.Events;
namespace Nop.Services.Caching;
/// 
/// Represents the base entity cache event consumer
///  
/// Entity type 
public abstract partial class CacheEventConsumer :
    IConsumer>,
    IConsumer>,
    IConsumer>
    where TEntity : BaseEntity
{
    #region Fields
    protected readonly IShortTermCacheManager _shortTermCacheManager;
    protected readonly IStaticCacheManager _staticCacheManager;
    #endregion
    #region Ctor
    protected CacheEventConsumer()
    {
        _shortTermCacheManager = EngineContext.Current.Resolve();
        _staticCacheManager = EngineContext.Current.Resolve();
    }
    #endregion
    #region Utilities
    /// 
    /// Clear cache by entity event type
    ///  
    /// Entity
    /// Entity event type
    /// A task that represents the asynchronous operation 
    protected virtual async Task ClearCacheAsync(TEntity entity, EntityEventType entityEventType)
    {
        await RemoveByPrefixAsync(NopEntityCacheDefaults.ByIdsPrefix);
        await RemoveByPrefixAsync(NopEntityCacheDefaults.AllPrefix);
        if (entityEventType != EntityEventType.Insert)
            await RemoveAsync(NopEntityCacheDefaults.ByIdCacheKey, entity);
        await ClearCacheAsync(entity);
    }
    /// 
    /// Clear cache data
    ///  
    /// Entity
    /// A task that represents the asynchronous operation 
    protected virtual Task ClearCacheAsync(TEntity entity)
    {
        return Task.CompletedTask;
    }
    /// 
    /// Removes items by cache key prefix
    ///  
    /// Cache key prefix
    /// Parameters to create cache key prefix
    /// A task that represents the asynchronous operation 
    protected virtual async Task RemoveByPrefixAsync(string prefix, params object[] prefixParameters)
    {
        _shortTermCacheManager.RemoveByPrefix(prefix, prefixParameters);
        await _staticCacheManager.RemoveByPrefixAsync(prefix, prefixParameters);
    }
    /// 
    /// Remove the value with the specified key from the cache
    ///  
    /// Cache key
    /// Parameters to create cache key
    /// A task that represents the asynchronous operation 
    public virtual async Task RemoveAsync(CacheKey cacheKey, params object[] cacheKeyParameters)
    {
        _shortTermCacheManager.Remove(cacheKey.Key, cacheKeyParameters);
        await _staticCacheManager.RemoveAsync(cacheKey, cacheKeyParameters);
    }
    #endregion
    #region Methods
    /// 
    /// Handle entity inserted event
    ///  
    /// Event message
    /// A task that represents the asynchronous operation 
    public virtual async Task HandleEventAsync(EntityInsertedEvent eventMessage)
    {
        await ClearCacheAsync(eventMessage.Entity, EntityEventType.Insert);
    }
    /// 
    /// Handle entity updated event
    ///  
    /// Event message
    /// A task that represents the asynchronous operation 
    public virtual async Task HandleEventAsync(EntityUpdatedEvent eventMessage)
    {
        await ClearCacheAsync(eventMessage.Entity, EntityEventType.Update);
    }
    /// 
    /// Handle entity deleted event
    ///  
    /// Event message
    /// A task that represents the asynchronous operation 
    public virtual async Task HandleEventAsync(EntityDeletedEvent eventMessage)
    {
        await ClearCacheAsync(eventMessage.Entity, EntityEventType.Delete);
    }
    #endregion
    #region Nested
    protected enum EntityEventType
    {
        Insert,
        Update,
        Delete
    }
    #endregion
}