using System.Collections.Generic; using System.Threading.Tasks; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.LastModified; using Sony.Filtr.DistributedCaching; namespace Sony.Filtr.Core.PromotedTracks { public class PromotedTracksManager { private readonly PromotedTracksFactory _promotedTracksFactory; private readonly DistributedCacheHandler _cacheHandler; private readonly LastModifiedManager _lastModifiedManager; public PromotedTracksManager(PromotedTracksFactory promotedTracksFactory, DistributedCacheHandler cacheHandler, LastModifiedManager lastModifiedManager) { _promotedTracksFactory = promotedTracksFactory; _cacheHandler = cacheHandler; _lastModifiedManager = lastModifiedManager; } public async Task> GetPromotedTracksAsync(Application app) { var cacheKey = GetPromotedTracksCacheKey(app); var promotedTracks = _cacheHandler.Get(cacheKey) as List; if (promotedTracks != null) return promotedTracks; promotedTracks = await _promotedTracksFactory.GetPromotedTracksAsync(app); _cacheHandler.Put(cacheKey, promotedTracks); return promotedTracks; } private static string GetPromotedTracksCacheKey(Application app) { var cacheKey = "Filtr.PromotedTracks-1.0:" + typeof(PromotedTrack) + ":" + PromotedTrack.Version + ":" + app.ID; return cacheKey; } public async Task SetPromotedTracksAsync(Application app, List tracks) { await _promotedTracksFactory.SetPromotedTracksAsync(app, tracks); var cacheKey = GetPromotedTracksCacheKey(app); _cacheHandler.Remove(cacheKey); await _lastModifiedManager.SetLastModifyDateAsync(app.ID, EntityType.PromotedTracks); } } }