private async Task <Dictionary <string, string> > GenerateDuplicateNhsNumberNotificationUrlsAsync(string nhsNumber, NotificationGroup group) { // If NhsNumber is empty or does not pass validation - return null // Potential duplication of validation here so that both Server and Dynamic/JS routes to warnings // can use the same method. if (string.IsNullOrEmpty(nhsNumber) || !string.IsNullOrEmpty( ValidationService.GetPropertyValidationResult <PatientDetails>("NhsNumber", nhsNumber, false).Content)) { return(null); } var ntbsNhsNumberMatchesTask = NotificationRepository.GetNotificationIdsByNhsNumberAsync(nhsNumber); var legacyNhsNumberMatchesTask = _migrationRepository.GetLegacyNotificationNhsNumberMatches(nhsNumber); var ntbsNhsNumberMatches = await ntbsNhsNumberMatchesTask; var legacyNhsNumberMatches = await legacyNhsNumberMatchesTask; var idsInGroup = group?.Notifications?.Select(n => n.NotificationId) ?? new List <int>(); var filteredNtbsIdDictionary = ntbsNhsNumberMatches .Except(idsInGroup) .Where(n => n != NotificationId) .ToDictionary( id => id.ToString(), id => RouteHelper.GetNotificationPath(id, NotificationSubPaths.Overview)); var legacyIdDictionary = legacyNhsNumberMatches.ToDictionary( match => $"{match.Source}: {match.OldNotificationId}", match => RouteHelper.GetLegacyNotificationPath(match.OldNotificationId)); return(filteredNtbsIdDictionary.Concat(legacyIdDictionary).ToDictionary(x => x.Key, x => x.Value)); }