using System.Linq; using System.Threading.Tasks; using PetaPoco.Business; using Sony.Filtr.DistributedCaching; namespace Sony.Filtr.SpotifyImages { public class SpotifyImageManager { private readonly DistributedCacheHandler _distributedCacheHandler; public SpotifyImageManager(DistributedCacheHandler distributedCacheHandler) { _distributedCacheHandler = distributedCacheHandler; } public void AddLocalImageData(PlaylistImageData localImageData) { PetaPocoRepository.Instance.Db.Insert(localImageData); ClearCache(localImageData.PlaylistId); } public void UpdateLocalImageData(PlaylistImageData localImageData) { PetaPocoRepository.Instance.Update(localImageData); ClearCache(localImageData.PlaylistId); } private void ClearCache(string playlistId) { _distributedCacheHandler.Remove(BuildPlaylistImageDataCacheKey(playlistId)); } public async Task GetCachedImageDataAsync(string playlistId) { var cacheKey = BuildPlaylistImageDataCacheKey(playlistId); var playlistImageData = _distributedCacheHandler.Get(cacheKey) as PlaylistImageData; if (playlistImageData == null) { playlistImageData = PetaPocoRepository.ReadOnlyInstance.SingleOrDefault(playlistId); _distributedCacheHandler.Put(cacheKey, playlistImageData); } return playlistImageData; } private string BuildPlaylistImageDataCacheKey(string playlistId) { return $"SpotifyImageManager:{playlistId}"; } } }