Ejemplo n.º 1
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));
        }
Ejemplo n.º 2
0
 public async Task <EventDetails> FetchAsync(string container, string configFile)
 {
     return(await _inMemoryCacheService.CacheAsync(async() => await GetAsync(container, configFile),
                                                   Constants.CacheEventDetailsKey, CacheDuration.CacheLow));
 }