using System; using System.Collections.Generic; using System.Linq; 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.Releases { public class DeezerReleaseManager { private readonly DistributedCacheHandler _cacheHandler; private readonly LastModifiedManager _lastModifiedManager; public DeezerReleaseManager(DistributedCacheHandler distributedCacheHandler, LastModifiedManager lastModifiedManager) { _cacheHandler = distributedCacheHandler; _lastModifiedManager = lastModifiedManager; } public List GetReleases(Application application) { var cacheKey = GetCacheKeyReleases(application.ID); var releases = _cacheHandler.Get(cacheKey) as List; if (releases == null) { releases = PetaPocoRepository.ReadOnlyInstance.Fetch("WHERE intApplicationID=@0", application.ID); _cacheHandler.Put(cacheKey, releases); } return releases; } public void SetReleases(Application application, List releases) { SetReleasesInternal(application, releases); ClearCacheReleases(application); _lastModifiedManager.SetLastModifyDate(application, EntityType.DeezerReleases); } private static void SetReleasesInternal(Application application, List releases) { var db = PetaPocoRepository.Instance.Db; using (var tr = db.GetTransaction()) { db.Delete("WHERE intApplicationID=@0", application.ID); foreach (var release in releases) { db.Insert(release); } tr.Complete(); } } private string GetCacheKeyReleases(int applicationID) { return "Deezer-NewReleases-1.0:" + DeezerRelease.Version + ":" + applicationID; } private void ClearCacheReleases(Application application) { var cacheKey = GetCacheKeyReleases(application.ID); _cacheHandler.Remove(cacheKey); } } }