using Sony.Filtr.Contracts.Entities; using Sony.Filtr.DistributedCaching; using System; using System.Collections.Generic; using System.Linq; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Core.LastModified; namespace Sony.Filtr.Core.Releases { public class ReleasesManager { private readonly ReleaseFactory _releaseFactory; private readonly DistributedCacheHandler _cacheHandler; private readonly LastModifiedManager _lastModifiedManager; public ReleasesManager(ReleaseFactory releaseFactory, DistributedCacheHandler cacheHandler, LastModifiedManager lastModifiedManager) { _releaseFactory = releaseFactory; _cacheHandler = cacheHandler; _lastModifiedManager = lastModifiedManager; } public IEnumerable GetReleases(Application app, string countryCode = null) { var cacheKey = GetCacheKeyReleases(app); var releases = _cacheHandler.Get(cacheKey) as List; if (releases == null) { releases = _releaseFactory.GetReleases(app); _cacheHandler.Put(cacheKey, releases.ToList()); } if (releases != null && !string.IsNullOrEmpty(countryCode)) releases = releases.Where(r => r.Availability.Contains("worldwide") || r.Availability.Contains(countryCode, StringComparer.InvariantCultureIgnoreCase)).ToList(); return releases; } public void SetReleases(List releases, Application application) { _releaseFactory.SetReleases(releases, application); ClearCacheReleases(application); _lastModifiedManager.SetLastModifyDate(application, EntityType.SpotifyReleases); } private string GetCacheKeyReleases(Application application) { var appKeyPart = (application != null) ? application.ID.ToString() : "null"; return "NewReleases-1.1:" + typeof(Release) + ":" + Release.Version + ":" + appKeyPart; } private void ClearCacheReleases(Application application) { var cacheKey = GetCacheKeyReleases(application); _cacheHandler.Remove(cacheKey); } } }