private void PopulateCategoriesCodes(ApprenticeshipSummaryUpdate vacancySummaryToIndex) { if (!string.IsNullOrEmpty(vacancySummaryToIndex.Category) && !string.IsNullOrEmpty(vacancySummaryToIndex.CategoryCode) && !string.IsNullOrEmpty(vacancySummaryToIndex.SubCategory) && !string.IsNullOrEmpty(vacancySummaryToIndex.SubCategoryCode)) { return; } var categories = _referenceDataService.GetCategories(); if (categories == null) { _logService.Error("Reference data service return null categories"); return; } var category = categories.FirstOrDefault(c => c.FullName == vacancySummaryToIndex.Category); if (category == null) { vacancySummaryToIndex.CategoryCode = "Unknown"; vacancySummaryToIndex.SubCategoryCode = "Unknown"; _logService.Warn(_strictEtlValidation, "The vacancy with Id {0} has an unknown Category and SubCategory: {1} | {2}. It is likely these were deprecated", vacancySummaryToIndex.Id, vacancySummaryToIndex.Category, vacancySummaryToIndex.SubCategory); } else { vacancySummaryToIndex.CategoryCode = category.CodeName; var subCategory = category.SubCategories.FirstOrDefault(sc => sc.FullName == vacancySummaryToIndex.SubCategory); if (subCategory == null) { vacancySummaryToIndex.CategoryCode = "Unknown"; vacancySummaryToIndex.SubCategoryCode = "Unknown"; _logService.Warn(_strictEtlValidation, "The vacancy with Id {0} has a mismatched Category/SubCategory: {1} | {2}", vacancySummaryToIndex.Id, vacancySummaryToIndex.Category, vacancySummaryToIndex.SubCategory); } else { vacancySummaryToIndex.SubCategoryCode = subCategory.CodeName; } } }
public void QueueVacancyIfExpiring(ApprenticeshipSummaryUpdate vacancySummary, int aboutToExpireThreshold) { try { if (vacancySummary.ClosingDate < DateTime.UtcNow.AddHours(aboutToExpireThreshold)) { _logService.Debug("Queueing expiring vacancy"); var vacancyAboutToExpireMessage = new VacancyAboutToExpire { Id = vacancySummary.Id }; _serviceBus.PublishMessage(vacancyAboutToExpireMessage); } } catch (Exception ex) { _logService.Warn("Failed queueing expiring vacancy {0}", ex, vacancySummary.Id); } }
public void ShouldQueueTheVacancyIfTheVacancyIsAboutToExpire() { const int aVacancyId = 5; var processor = new ApprenticeshipSummaryUpdateProcessor( _logService.Object, _serviceBus.Object, _configurationService.Object, _vacancyIndexer.Object, _referenceDataService.Object); var vacancySummary = new ApprenticeshipSummaryUpdate { Id = aVacancyId, ClosingDate = DateTime.UtcNow.AddHours(VacancyAboutToExpireNotificationHours - 1) }; processor.QueueVacancyIfExpiring(vacancySummary, VacancyAboutToExpireNotificationHours); _serviceBus.Verify(x => x.PublishMessage(It.Is <VacancyAboutToExpire>(m => m.Id == aVacancyId))); }
public void Process(ApprenticeshipSummaryUpdate vacancySummaryToIndex) { PopulateCategoriesCodes(vacancySummaryToIndex); _vacancyIndexerService.Index(vacancySummaryToIndex); QueueVacancyIfExpiring(vacancySummaryToIndex, _vacancyAboutToExpireThreshold); }