public async Task <IActionResult> Get(int ukprn) { _log.LogDebug($"Fetching GET for ukprn: [{ukprn}]"); if (ukprn.ToString().Length != 8) { _log.LogDebug($"Invalid UKPRN (must be 8 numbers): [{ukprn}]"); return(BadRequest("Invalid UKPRN (should be 8 numbers long)")); } IEnumerable <RoatpResult> roatpResults; try { var result = _retryService.RetryPolicy($"<roatpService>//api/v1/download/roatp-summary/{ukprn}").ExecuteAsync(context => _apiClient.GetRoatpSummaryByUkprn(ukprn), new Context()); roatpResults = result.Result; } catch (Exception ex) { _log.LogError($"Unable to retrieve results for roatp with ukprn [{ukprn}]", ex); roatpResults = new List <RoatpResult>(); } var provider = _mapper.Map(roatpResults?.FirstOrDefault()); if (provider == null || !provider.IsDateValid(DateTime.UtcNow)) { _log.LogDebug($"Invalid UKPRN result for ukprn [{ukprn}]: not found or start date in future"); return(NotFound("Provider not found or start date in future")); } provider.Uri = Resolve(provider.Ukprn); return(Ok(provider)); }
public async Task<List<RoatpProviderResult>> Handle(RoatpRequest message) { var roatpSummaries = await _apiClient.GetRoatpSummary(); var records = _mapper.Map(roatpSummaries); _logger.Debug($"Retrieved {records.Count} providers on the ROATP list", new Dictionary<string, object> { { "TotalCount", records.Count } }); var filtered = records.Where(x => _validProviderTypes.Contains(x.ProviderType) && x.IsDateValid()).ToList(); _logger.Debug($"Filtered out Supporting providers on ROATP", new Dictionary<string, object> { { "TotalCount", filtered.Count } }); return filtered; }
public async Task <List <RoatpProvider> > GetRoatpSummary() { try { _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _tokenService.GetToken()); _log.Info("Gathering roatp details from API"); var response = await _httpClient.GetAsync(downloadPath); var results = await response.Content.ReadAsAsync <List <RoatpResult> >(); return(_mapper.Map(results)); } catch (Exception e) { _log.Error(e, $"Error gathering roatp details from API: [{e.Message}]"); throw; } }