private static SlotEntrySummaryCount PopulateSlotEntrySummaryCount(RequestParametersList requestParameter, DTO.Response.Logging.SpineMessage spineMessage, Bundle results) { if (results.Issue?.Count > 0) { return(new SlotEntrySummaryCount { ErrorCode = ErrorCode.GenericSlotSearchError, ErrorDetail = results.Issue, FreeSlotCount = null, OdsCode = requestParameter.OdsCode, SpineMessageId = spineMessage.SpineMessageId }); } else { return(new SlotEntrySummaryCount { ErrorCode = ErrorCode.None, ErrorDetail = null, FreeSlotCount = results.entry?.Count(x => x.resource.resourceType == ResourceTypes.Slot), OdsCode = requestParameter.OdsCode, SpineMessageId = spineMessage.SpineMessageId }); } }
private async Task <CapabilityStatementList> PopulateCapabilityStatementResults(RequestParametersList requestParameter, SemaphoreSlim semaphore, HttpClient client, CancellationToken cancellationToken) { try { var spineMessageType = (_configurationService.GetSpineMessageTypes()).FirstOrDefault(x => x.SpineMessageTypeId == (int)SpineMessageTypes.GpConnectReadMetaData); requestParameter.RequestParameters.SpineMessageTypeId = (int)SpineMessageTypes.GpConnectReadMetaData; requestParameter.RequestParameters.InteractionId = spineMessageType?.InteractionId; var stopWatch = new Stopwatch(); stopWatch.Start(); _spineMessage.SpineMessageTypeId = requestParameter.RequestParameters.SpineMessageTypeId; AddRequiredRequestHeaders(requestParameter.RequestParameters, client); _spineMessage.RequestHeaders = client.DefaultRequestHeaders.ToString(); await semaphore.WaitAsync(); var request = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri($"{requestParameter.RequestParameters.EndpointAddressWithSpineSecureProxy}/metadata") }; var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken); var contents = await response.Content.ReadAsStringAsync(); _spineMessage.ResponsePayload = contents; _spineMessage.ResponseStatus = response.StatusCode.ToString(); _spineMessage.RequestPayload = request.ToString(); _spineMessage.ResponseHeaders = response.Headers.ToString(); stopWatch.Stop(); _spineMessage.RoundTripTimeMs = stopWatch.ElapsedMilliseconds; _logService.AddSpineMessageLog(_spineMessage); var capabilityStatement = JsonConvert.DeserializeObject <CapabilityStatement>(contents); return(new CapabilityStatementList { OdsCode = requestParameter.OdsCode, CapabilityStatement = capabilityStatement, ErrorCode = (capabilityStatement.Issue?.Count > 0 ? ErrorCode.CapabilityStatementHasErrors : ErrorCode.None) }); } finally { semaphore.Release(); } }
private async Task <SlotEntrySummaryCount> PopulateResults(DateTime startDate, DateTime endDate, RequestParametersList requestParameter, SemaphoreSlim semaphore, HttpClient client, CancellationToken cancellationToken) { try { var spineMessageType = _configurationService.GetSpineMessageTypes().FirstOrDefault(x => x.SpineMessageTypeId == (int)SpineMessageTypes.GpConnectSearchFreeSlots); requestParameter.RequestParameters.SpineMessageTypeId = (int)SpineMessageTypes.GpConnectSearchFreeSlots; requestParameter.RequestParameters.InteractionId = spineMessageType?.InteractionId; var stopWatch = new Stopwatch(); stopWatch.Start(); _spineMessage.SpineMessageTypeId = requestParameter.RequestParameters.SpineMessageTypeId; AddRequiredRequestHeaders(requestParameter.RequestParameters, client); _spineMessage.RequestHeaders = client.DefaultRequestHeaders.ToString(); var requestUri = new Uri($"{requestParameter.RequestParameters.EndpointAddressWithSpineSecureProxy}/Slot"); var uriBuilder = AddQueryParameters(requestParameter.RequestParameters, startDate, endDate, requestUri); await semaphore.WaitAsync(); var request = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = uriBuilder.Uri }; var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken); var contents = await response.Content.ReadAsStringAsync(); _spineMessage.ResponsePayload = contents; _spineMessage.ResponseStatus = response.StatusCode.ToString(); _spineMessage.RequestPayload = request.ToString(); _spineMessage.ResponseHeaders = response.Headers.ToString(); stopWatch.Stop(); _spineMessage.RoundTripTimeMs = stopWatch.ElapsedMilliseconds; var spineMessage = _logService.AddSpineMessageLog(_spineMessage); var results = JsonConvert.DeserializeObject <Bundle>(contents); return(PopulateSlotEntrySummaryCount(requestParameter, spineMessage, results)); } finally { semaphore.Release(); } }
private Task <SlotEntrySummaryCount> ProcessResults(List <OrganisationErrorCodeOrDetail> organisationErrorCodeOrDetails, SearchType searchType, DateTime startDate, DateTime endDate, RequestParametersList requestParameter, SemaphoreSlim semaphore, HttpClient client, CancellationToken cancellationToken) { switch (searchType) { case SearchType.Provider: if (organisationErrorCodeOrDetails.Where(x => x.providerOrganisation?.OdsCode == requestParameter?.OdsCode)?.FirstOrDefault()?.errorSource == ErrorCode.None) { return(PopulateResults(startDate, endDate, requestParameter, semaphore, client, cancellationToken)); } break; case SearchType.Consumer: if (organisationErrorCodeOrDetails.Where(x => x.consumerOrganisation?.OdsCode == requestParameter?.OdsCode)?.FirstOrDefault()?.errorSource == ErrorCode.None) { return(PopulateResults(startDate, endDate, requestParameter, semaphore, client, cancellationToken)); } break; } return(null); }