using PostSharp.Patterns.Caching;
using System;
using System.Threading;
 
namespace PostSharp.Samples.Caching
{
  [CacheConfiguration(AbsoluteExpiration = 10)]
  internal class CustomerServices
  {
    [Cache]
    public static Customer GetCustomer(int id)
    {
      Console.WriteLine($">> Retrieving the customer {id} from database...");
      Thread.Sleep(1000);
      return new Customer { Id = id, Name = "Rubber Debugging Duck" };
    }
 
    [InvalidateCache(nameof(GetCustomer))]
    public static void UpdateCustomer(int id, string newName)
    {
      Console.WriteLine($">> Updating the customer {id} in database...");
      Thread.Sleep(1000);
    }
 
    public static void DeleteCustomer(int id, string newName)
    {
      Console.WriteLine($">> Deleting the customer {id} from database...");
      Thread.Sleep(1000);
 
      CachingServices.Invalidation.Invalidate(GetCustomer, id);
    }
  }
}