private static async Task <string> GenerateCoursesExportForProvider(
            ILogger log,
            ICourseCollectionService courseCollectionService,
            StringBuilder logFile,
            IMiragtionProviderItem mpItem,
            CloudBlobContainer containerExporter,
            string containerNameExporter)
        {
            logFile.AppendLine($"Conditional logic for {mpItem} is True.");

            logFile.AppendLine($"\tAttempting to get courses' data for: {mpItem}");

            var courses = await courseCollectionService.GetAllLiveCoursesAsJsonForUkprnAsync(mpItem.Ukprn);

            logFile.AppendLine($"\tGot courses' data for: {mpItem}");

            if (courses != "[]")
            {
                logFile.AppendLine($"\t\tHas courses' data for: {mpItem}");

                var coursesFileName =
                    $"{DateTime.Today.ToString("yyyyMMdd")}\\Generated\\Courses_for_Provider_{mpItem.Ukprn}_{DateTime.Now.ToString("yyyy-MM-ddTHH-mm-ss")}.json";

                logFile.AppendLine($"\t\tGot reference to block blob containers for file: {coursesFileName}");

                var coursesBlob = containerExporter.GetBlockBlobReference(coursesFileName);

                logFile.AppendLine(
                    $"\t\tAttempting to upload file {coursesFileName} to blob container {containerNameExporter}");

                await coursesBlob.UploadTextAsync(courses);

                log.LogInformation($"uploaded {coursesFileName}");

                logFile.AppendLine($"\t\tUploaded file {coursesFileName} to blob container {containerNameExporter}");

                return(coursesFileName);
            }
            else
            {
                logFile.AppendLine($"\t\tHas no courses' data for: {mpItem}");
                return(null);
            }
        }
        private static async Task <IEnumerable <string> > CheckForProviderUpdates(
            ILogger log,
            ICourseCollectionService courseCollectionService,
            IVenueCollectionService venueCollectionService,
            StringBuilder logFile,
            IMiragtionProviderItem mpItem,
            DateTime fromDate,
            CloudBlobContainer containerExporter,
            string containerNameExporter)
        {
            var fileNames = new List <string>();

            logFile.AppendLine($"Attempting to get conditional data for: {mpItem}");

            var hasTodaysDate           = mpItem.DateMigrated.Date == DateTime.Today;
            var dateMigratedIsInThePast = mpItem.DateMigrated.Date < DateTime.Today;

            var hasCreatedCourses = await courseCollectionService.HasCoursesBeenCreatedSinceAsync(mpItem.Ukprn, fromDate);

            var hasCreatedCourseRuns =
                await courseCollectionService.HasCourseRunsBeenCreatedSinceAsync(mpItem.Ukprn, fromDate);

            var hasUpdatedCourses = await courseCollectionService.HasCoursesBeenUpdatedSinceAsync(mpItem.Ukprn, fromDate);

            var hasUpdatedCourseRuns =
                await courseCollectionService.HasCourseRunsBeenUpdatedSinceAsync(mpItem.Ukprn, fromDate);

            var hasDeletedCourses = await courseCollectionService.HasCoursesBeenDeletedSinceAsync(mpItem.Ukprn, fromDate);

            var hasDeletedCourseRuns =
                await courseCollectionService.HasCourseRunsBeenDeletedSinceAsync(mpItem.Ukprn, fromDate);

            var hasUpdatedVenues = await venueCollectionService.HasBeenAnUpdatedSinceAsync(mpItem.Ukprn, fromDate);

            logFile.AppendLine($"Got conditional data for: {mpItem}");
            logFile.AppendLine($"\tHas today's date: {hasTodaysDate}");
            logFile.AppendLine($"\tDate migrated is in the past: {dateMigratedIsInThePast}");
            logFile.AppendLine($"\tHas created Courses: {hasCreatedCourses}");
            logFile.AppendLine($"\tHas created CourseRuns: {hasCreatedCourseRuns}");
            logFile.AppendLine($"\tHas updated Courses: {hasUpdatedCourses}");
            logFile.AppendLine($"\tHas updated CourseRuns: {hasUpdatedCourseRuns}");
            logFile.AppendLine($"\tHas deleted Courses: {hasDeletedCourses}");
            logFile.AppendLine($"\tHas deleted CourseRuns: {hasDeletedCourseRuns}");
            logFile.AppendLine($"\tHas updated Venues: {hasUpdatedVenues}");
            logFile.AppendLine($"End of conditional data for: {mpItem}");

            if (hasTodaysDate || (dateMigratedIsInThePast))
            {
                if (hasCreatedCourses || hasCreatedCourseRuns || hasUpdatedCourses || hasUpdatedCourseRuns ||
                    hasDeletedCourses || hasDeletedCourseRuns)
                {
                    log.LogInformation($"updating courses for {mpItem.Ukprn}");

                    var courseFilename = await GenerateCoursesExportForProvider(log, courseCollectionService, logFile, mpItem, containerExporter,
                                                                                containerNameExporter).ConfigureAwait(false);

                    fileNames.Add(courseFilename);
                }

                if (hasUpdatedVenues)
                {
                    log.LogInformation($"updating venues for {mpItem.Ukprn}");

                    var venueFilename = await GenerateVenuesExportForProvider(log, venueCollectionService, logFile, mpItem, containerExporter,
                                                                              containerNameExporter).ConfigureAwait(false);

                    fileNames.Add(venueFilename);
                }
            }
            else
            {
                logFile.AppendLine($"Conditional logic for {mpItem} is False.");
            }

            return(fileNames);
        }