Exemplo n.º 1
0
        public static async Task Sync(ISessionizeApiClient apiClient, ITableStorageRepository <SessionEntity> sessionRepo, ITableStorageRepository <PresenterEntity> presenterRepo, ILogger log, IDateTimeProvider dateTimeProvider, string conferenceInstance)
        {
            var sessionizeData = await apiClient.GetAllData();

            log.LogInformation("Retrieved {sessionCount} sessions, {presenterCount} presenters from Sessionize API {sessionizeApiUrl}", sessionizeData.Sessions.Length, sessionizeData.Speakers.Length, apiClient.GetUrl());

            var sourceData = SessionizeAdapter.SessionizeAdapter.Convert(sessionizeData, dateTimeProvider);

            log.LogInformation("Sessionize data successfully adapted to DDD domain model: {sessionCount} sessions and {presenterCount} presenters", sourceData.Item1.Length, sourceData.Item2.Length);

            var destinationSessions   = (await sessionRepo.GetAllAsync(conferenceInstance)).ToArray();
            var destinationPresenters = (await presenterRepo.GetAllAsync(conferenceInstance)).ToArray();

            log.LogInformation("Existing read model retrieved: {sessionCount} sessions and {presenterCount} presenters", destinationSessions.Length, destinationPresenters.Length);

            await PerformSync(conferenceInstance, sessionRepo, presenterRepo, sourceData.Item1, sourceData.Item2, destinationSessions, destinationPresenters, log, dateTimeProvider);
        }