using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; using PetaPoco.Business; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.LastModified; using Sony.Filtr.DistributedCaching; namespace Sony.Filtr.Core.ImageCarousel { public class ImageCarouselManager { private readonly LastModifiedManager _lastModifiedManager; private readonly DistributedCacheHandler _distributedCacheHandler; public ImageCarouselManager(LastModifiedManager lastModifiedManager, DistributedCacheHandler distributedCacheHandler) { _lastModifiedManager = lastModifiedManager; _distributedCacheHandler = distributedCacheHandler; } public List GetImages(Application application) { List images = null; var cacheKey = GetImageCarouselCacheKey(application); var imageString = _distributedCacheHandler.Get(cacheKey) as string; if (imageString != null) { images = JsonConvert.DeserializeObject>(imageString); } if (images == null) { images = GetImagesInternal(application); _distributedCacheHandler.Put(cacheKey, JsonConvert.SerializeObject(images)); } return images; } private static List GetImagesInternal(Application application) { if (application == null) { return PetaPocoRepository.Instance.Fetch(); } return PetaPocoRepository.Instance.Fetch("WHERE applicationId=@0", application.ID); } public CarouselImage GetImage(int id) { return PetaPocoRepository.Instance.SingleOrDefault(id); } public CarouselImage SaveImage(CarouselImage image) { var savedImage = PetaPocoRepository.Instance.Upsert(image); _lastModifiedManager.SetLastModifyDate(image.ApplicationId, EntityType.CarouselImage); ClearCache(image); return savedImage; } public void DeleteImage(CarouselImage image) { PetaPocoRepository.Instance.Delete(image); _lastModifiedManager.SetLastModifyDate(image.ApplicationId, EntityType.CarouselImage); ClearCache(image); } private static string GetImageCarouselCacheKey(Application application) { var cacheKey = "ImageCarouselCacheKey-1.0:" + typeof(CarouselImage) + ":" + CarouselImage.Version + ":" + (application != null ? application.ID.ToString() : "null"); return cacheKey; } private void ClearCache(CarouselImage carouselImage) { _distributedCacheHandler.Remove(GetImageCarouselCacheKey(new Application() { ID = carouselImage.ApplicationId })); _distributedCacheHandler.Remove(GetImageCarouselCacheKey(null)); } } }