コード例 #1
0
ファイル: SiteService.cs プロジェクト: iafb/gra4
        public async Task UpdateSiteSettingsAsync(int siteId, IEnumerable <SiteSetting> siteSettings)
        {
            VerifyManagementPermission();
            var currentSiteSettings = await _siteSettingRepository.GetBySiteIdAsync(siteId);

            var siteSettingsToAdd = siteSettings
                                    .Where(_ => currentSiteSettings.Select(s => s.Key).Contains(_.Key) == false);
            var siteSettingsToRemove = currentSiteSettings
                                       .Where(_ => siteSettings.Select(s => s.Key).Contains(_.Key) == false)
                                       .Select(_ => _.Id);
            var siteSettingsToUpdate = siteSettings
                                       .Where(_ => currentSiteSettings
                                              .Where(s => s.Key == _.Key)
                                              .Any(s => s.Value != _.Value));

            var userId = GetClaimId(ClaimType.UserId);
            await _siteSettingRepository.AddListAsync(userId, siteSettingsToAdd);

            await _siteSettingRepository.RemoveListAsync(userId, siteSettingsToRemove);

            await _siteSettingRepository.UpdateListAsync(userId, siteSettingsToUpdate);

            await _siteSettingRepository.SaveAsync();

            await _siteLookupService.ReloadSiteCacheAsync();
        }
コード例 #2
0
        private async Task <IEnumerable <Site> > GetSitesFromCacheAsync()
        {
            IEnumerable <Site> sites;
            var cachedSites = await _cache.GetStringFromCache(CacheKey.Sites);

            if (cachedSites == null)
            {
                sites = await _siteRepository.GetAllAsync();

                if (!sites.Any())
                {
                    _logger.LogInformation("No sites in database, inserting initial site");
                    sites = await InsertInitialSiteAsync();
                }
                await _cache.SaveToCacheAsync(CacheKey.Sites,
                                              JsonConvert.SerializeObject(sites),
                                              8);

                _logger.LogTrace("Cache miss on sites: {Count} loaded", sites.Count());
            }
            else
            {
                sites = JsonConvert.DeserializeObject <IEnumerable <Site> >(cachedSites);
            }

            foreach (var site in sites)
            {
                string key = $"s{site.Id}.{CacheKey.SiteSettings}";
                var    cachedSiteSettings = await _cache.GetStringFromCache(key);

                if (cachedSiteSettings == null)
                {
                    site.Settings = await _siteSettingRepository.GetBySiteIdAsync(site.Id);

                    await _cache.SaveToCacheAsync(key,
                                                  JsonConvert.SerializeObject(site.Settings),
                                                  8);

                    _logger.LogTrace("Cache miss on site settings for site id {Id}, {Count} loaded",
                                     site.Id,
                                     site.Settings.Count);
                }
                else
                {
                    site.Settings = JsonConvert.DeserializeObject <ICollection <SiteSetting> >(cachedSiteSettings);
                }
            }

            return(sites);
        }
コード例 #3
0
        private async Task <IEnumerable <Site> > GetSitesFromCacheAsync()
        {
            IEnumerable <Site> sites = null;
            var cachedSites          = _cache.GetString(CacheKey.Sites);

            if (cachedSites == null)
            {
                sites = await _siteRepository.GetAllAsync();

                if (sites.Count() == 0)
                {
                    sites = await InsertInitialSiteAsync();
                }
                _cache.SetString(CacheKey.Sites, JsonConvert.SerializeObject(sites));
                _logger.LogTrace("Cache miss on sites: {Count} loaded", sites.Count());
            }
            else
            {
                sites = JsonConvert.DeserializeObject <IEnumerable <Site> >(cachedSites);
            }

            foreach (var site in sites)
            {
                string key = $"s{site.Id}.{CacheKey.SiteSettings}";
                var    cachedSiteSettings = _cache.GetString(key);

                if (cachedSiteSettings == null)
                {
                    site.Settings = await _siteSettingRepository.GetBySiteIdAsync(site.Id);

                    _cache.SetString(key, JsonConvert.SerializeObject(site.Settings));
                    _logger.LogTrace("Cache miss on site settings for site id {Id}, {Count} loaded",
                                     site.Id,
                                     site.Settings.Count());
                }
                else
                {
                    site.Settings = JsonConvert.DeserializeObject <ICollection <SiteSetting> >(cachedSiteSettings);
                }
            }

            return(sites);
        }
コード例 #4
0
        private async Task <IEnumerable <Site> > GetSitesFromCacheAsync()
        {
            var sites = _memoryCache.Get <IEnumerable <Site> >(CacheKey.SitePaths);

            if (sites == null)
            {
                sites = await _siteRepository.GetAllAsync();

                if (sites.Count() == 0)
                {
                    sites = await InsertInitialSiteAsync();
                }
                foreach (var site in sites)
                {
                    site.Settings = await _siteSettingRepository.GetBySiteIdAsync(site.Id);
                }
                _memoryCache.Set(CacheKey.SitePaths, sites);
            }
            return(sites);
        }