private IEnumerable <Provider> GetProviderQueryResponse(SelectionCriteriaStructure criteria, string queryId, int batchSize, IDictionary <string, string> warnings) { var noOfUkprnsProcessed = 0; var providerUkprns = criteria.UnitedKingdomProviderReferenceNumberList.ToList(); var ukprnsListSize = providerUkprns.Count; do { var numberOfUkprnsUnprocessed = ukprnsListSize - noOfUkprnsProcessed; var numberOfUkprnsToSend = numberOfUkprnsUnprocessed > batchSize ? batchSize : numberOfUkprnsUnprocessed; criteria.UnitedKingdomProviderReferenceNumberList = providerUkprns.Skip(noOfUkprnsProcessed).Take(numberOfUkprnsToSend).ToArray(); var providerQueryStructure = new ProviderQueryStructure { QueryId = queryId, SchemaVersion = "?", SelectionCriteria = criteria }; ProviderQueryResponse response = null; try { PreRequest?.Invoke(criteria); response = _client.retrieveAllProviders(providerQueryStructure); PostRequest?.Invoke(criteria, response); } catch (Exception ex) { throw new ProviderQueryException(ex.Message, criteria, ex); } var providers = response?.MatchingProviderRecords?.Select(MapFromUkrlpProviderRecord).ToList() ?? new List <Provider>(); foreach ( var missing in criteria.UnitedKingdomProviderReferenceNumberList.Where( x => providers.All(y => x != y.UnitedKingdomProviderReferenceNumber))) { warnings.Add(missing, MissingMessage); } foreach (var provider in providers) { yield return(provider); } noOfUkprnsProcessed += numberOfUkprnsToSend; } while (noOfUkprnsProcessed < ukprnsListSize); }
private void LogResponse(SelectionCriteriaStructure criteria, ProviderQueryResponse response) { var providers = response.MatchingProviderRecords?.Select(x => x.UnitedKingdomProviderReferenceNumber) ?? new List <string>(); var properties = new Dictionary <string, object> { { "TotalCount", response.MatchingProviderRecords?.Length }, { "Request", JsonConvert.SerializeObject(criteria.UnitedKingdomProviderReferenceNumberList, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }, { "Body", string.Join(", ", providers) } }; _logger.Debug("UKRLP response", properties); }