Exemple #1
0
        public async Task <IActionResult> CacheRefreshAsync([FromQuery] string key)
        {
            if (string.IsNullOrEmpty(key) ||
                !string.Equals(key, Environment.GetEnvironmentVariable(Constants.EnvAdminKey)))
            {
                return(BadRequest());
            }

            _memoryCache.Remove(Constants.CacheEventDetailsKey);

            var eventFile      = Environment.GetEnvironmentVariable(Constants.EnvEventFile) ?? "ga-greece-2021.json";
            var eventContainer = Environment.GetEnvironmentVariable(Constants.EnvEventContainer) ?? "gab-events";

            var content = await _eventDetailsService.FetchAsync(eventContainer, eventFile);

            _memoryCache.Remove(Constants.CacheSpeakersKey);
            _memoryCache.Remove(Constants.CacheSessionsKey);

            return(Ok(content));
        }
Exemple #2
0
        public async Task <EventDetails> FetchAsync(string container, string file)
        {
            return(await _inMemoryCacheService.CacheAsync(async() =>
            {
                var eventDetails =
                    await _eventDetailsService.FetchAsync(container, file);
                _logger.LogInformation("event configuration has been loaded");

                if (eventDetails.SpeakerOrder != null)
                {
                    var speakers = (await _eventSessionizeService.FetchSpeakersAsync(eventDetails.Integrations.Sessionize.EventId)).ToArray();
                    eventDetails.Speakers = eventDetails.SpeakerOrder
                                            .Select(key => speakers.FirstOrDefault(c => c.Id == key))
                                            .Where(s => s != null)
                                            .ToList();
                    _logger.LogInformation("speaker order has been applied");
                }

                eventDetails.Schedule = new Schedule {
                    Sessions = await _eventSessionizeService.FetchSessionsAsync(eventDetails.Integrations.Sessionize.EventId)
                };
                eventDetails.Schedule.Slots = eventDetails.Schedule.Sessions
                                              .Where(c => !string.IsNullOrEmpty(c.Room))
                                              .OrderBy(c => c.Room)
                                              .GroupBy(c => c.Room)
                                              .ToDictionary(g => g.Key, g => g.ToArray());
                _logger.LogInformation("schedule has been generated");

                foreach (var slot in eventDetails.Schedule.Slots)
                {
                    var streamUrls =
                        eventDetails.State.ShowStreamUrlsFrom <= DateTime.UtcNow &&
                        eventDetails.State.ShowStreamUrlsTo > DateTime.UtcNow
                            ? eventDetails.StreamUrls
                            : null;
                    Hydrate(slot.Value, eventDetails.Speakers, streamUrls);
                }

                return eventDetails;
            }, Constants.CacheEventsKey));
        }