using Sony.Filtr.DistributedCaching; using System; using System.Collections.Generic; using System.Linq; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.LastModified; namespace Sony.Filtr.Core.SpotifyUserCountries { public class SpotifyUserCountryManager { private readonly DistributedCacheHandler _cacheHandler; private readonly SpotifyUserCountryFactory _factory; private readonly LastModifiedManager _lastModifiedManager; public SpotifyUserCountryManager(DistributedCacheHandler distributedCacheHandler, SpotifyUserCountryFactory spotifyUserCountryFactory, LastModifiedManager lastModifiedManager) { _cacheHandler = distributedCacheHandler; _factory = spotifyUserCountryFactory; _lastModifiedManager = lastModifiedManager; } public SpotifyUserCountry GetSpotifyUserCountry(int ID) { return GetSpotifyUsersCountry().FirstOrDefault(u => u.ID == ID); } public SpotifyUserCountry GetSpotifyUserCountry(string username) { return GetSpotifyUsersCountry().FirstOrDefault(u => string.Equals(u.SpotifyUserName, username, StringComparison.InvariantCultureIgnoreCase)); } public IEnumerable GetSpotifyUsersCountry() { var users = _cacheHandler.Get(GetSpotifyUsersCountryCacheKey()) as List; if (users == null) { users = _factory.GetSpotifyCountryUsers(); _cacheHandler.Put(GetSpotifyUsersCountryCacheKey(), users); } return users; } private string GetSpotifyUsersCountryCacheKey() { return "SpotifyUsersCountry" + typeof(SpotifyUserCountry) + ":" + SpotifyUserCountry.Version; } public SpotifyUserCountry SaveSpotifyUsersCountry(SpotifyUserCountry spotifyUserCountry) { if (spotifyUserCountry.ID == default(int)) spotifyUserCountry = _factory.AddSpotifyCountryUser(spotifyUserCountry); else spotifyUserCountry = _factory.UpdateSpotifyCountryUser(spotifyUserCountry); ClearCache(spotifyUserCountry); _lastModifiedManager.SetLastModifyDate(null, EntityType.FiltrUsers); return spotifyUserCountry; } public void DeleteSpotifyUsersCountry(SpotifyUserCountry user) { _factory.DeleteSpotifyCountryUser(user); ClearCache(user); _lastModifiedManager.SetLastModifyDate(null, EntityType.FiltrUsers); } private void ClearCache(SpotifyUserCountry spotifyUserCountry) { _cacheHandler.Remove(GetSpotifyUsersCountryCacheKey()); } } }