Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }