using System.Collections.Generic; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.Settings; using Sony.Filtr.DistributedCaching; namespace Sony.Filtr.Core.Seasons { public class SeasonManager { private readonly SeasonFactory _seasonFactory; private readonly SettingsManager _settingsManager; private readonly DistributedCacheHandler _cacheHandler; public SeasonManager(SeasonFactory seasonFactory, SettingsManager settingsManager, DistributedCacheHandler cacheHandler) { _seasonFactory = seasonFactory; _settingsManager = settingsManager; _cacheHandler = cacheHandler; } public Season GetSeason(int id) { var cacheKey = GetSingleSeasonCacheKey(id); var season = _cacheHandler.Get(cacheKey) as Season; if (season == null) { season = _seasonFactory.GetSeasons(id); _cacheHandler.Put(cacheKey, season); } return season; } public List GetSeasons(Application application) { var cacheKey = GetSeasonsCacheKey(application); var seasons = _cacheHandler.Get(cacheKey) as List; if (seasons == null) { seasons = _seasonFactory.GetSeasons(application); _cacheHandler.Put(cacheKey, seasons); } return seasons; } public Season AddSeason(Season season) { season = _seasonFactory.AddSeason(season); ClearCache(season.ApplicationId); return season; } public void UpdateSeason(Season season) { _seasonFactory.UpdateSeason(season); ClearCache(season.ApplicationId); ClearCache(season); } public void DeleteSeason(Season season) { _seasonFactory.DeleteSeason(season); ClearCache(season.ApplicationId); ClearCache(season); } private void ClearCache(int applicationId) { var cacheKey = GetSeasonsCacheKey(new Application() { ID = applicationId }); _cacheHandler.Remove(cacheKey); } private void ClearCache(Season season) { var cacheKey = GetSingleSeasonCacheKey(season.Id); _cacheHandler.Remove(cacheKey); } private string GetSingleSeasonCacheKey(int id) { return "Season-Single-1.1:" + typeof(Season) + ":" + Season.Version + ":" + id; } private string GetSeasonsCacheKey(Application application) { return "Seasons-1.1:" + typeof(Season) + ":" + Season.Version + ":" + application.ID; } public Season GetActiveSeason(Application application) { var activeSeasonId = _settingsManager.GetIntSetting("ActiveSeason", application); if (activeSeasonId != 0) return GetSeason(activeSeasonId); return null; } public void SetActiveSeason(Application application, Season season) { _settingsManager.SetIntSetting("ActiveSeason", season.Id, application); } } }