private void AndGetFileSystemCache()
        {
            ProviderVersionSearchResult providerVersionSearchResult = NewProviderVersionSearchResult(_ => _.WithProviderId(_providerId));

            _fileSystemCache
            .Get(Arg.Is <FileSystemCacheKey>(_ => _.Path == $"{ProviderVersionFolderName}\\{_publishedProviderVersion}.json"))
            .Returns(new MemoryStream(providerVersionSearchResult.AsJsonBytes()));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetPublishedProviderInformation(string publishedProviderVersion)
        {
            Guard.ArgumentNotNull(publishedProviderVersion, nameof(publishedProviderVersion));

            string blobName = $"{publishedProviderVersion}.json";

            ProviderVersionSystemCacheKey providerVersionFileSystemCacheKey = new ProviderVersionSystemCacheKey(blobName);

            if (_cacheSettings.IsEnabled && _fileSystemCache.Exists(providerVersionFileSystemCacheKey))
            {
                await using Stream providerVersionDocumentStream = _fileSystemCache.Get(providerVersionFileSystemCacheKey);

                ProviderVersionSearchResult cachedProviderVersionSearchResult = providerVersionDocumentStream.AsPoco <ProviderVersionSearchResult>();

                return(new OkObjectResult(cachedProviderVersionSearchResult));
            }

            (string providerVersionId, string providerId)results =
                await _publishedFundingRepositoryPolicy.ExecuteAsync(() => _publishedFundingRepository.GetPublishedProviderId(publishedProviderVersion));

            if (string.IsNullOrEmpty(results.providerVersionId) || string.IsNullOrEmpty(results.providerId))
            {
                _logger.Error($"Failed to retrieve published provider with publishedProviderVersion: {publishedProviderVersion}");

                return(new NotFoundResult());
            }

            ApiResponse <ProvidersApiClientModel.Search.ProviderVersionSearchResult> apiResponse =
                await _providersApiClientPolicy.ExecuteAsync(() =>
                                                             _providersApiClient.GetProviderByIdFromProviderVersion(results.providerVersionId, results.providerId));

            if (apiResponse?.Content == null || !apiResponse.StatusCode.IsSuccess())
            {
                string errorMessage = $"Failed to retrieve GetProviderByIdFromProviderVersion with " +
                                      $"providerVersionId: {results.providerVersionId} and providerId: {results.providerId}";

                _logger.Error(errorMessage);

                return(new InternalServerErrorResult(errorMessage));
            }

            ProviderVersionSearchResult providerVersionSearchResult = _mapper.Map <ProviderVersionSearchResult>(apiResponse.Content);

            if (_cacheSettings.IsEnabled)
            {
                if (!_fileSystemCache.Exists(providerVersionFileSystemCacheKey))
                {
                    await using MemoryStream stream = new MemoryStream(providerVersionSearchResult.AsJsonBytes());

                    _fileSystemCache.Add(providerVersionFileSystemCacheKey, stream, ensureFolderExists: true);
                }
            }

            return(new OkObjectResult(providerVersionSearchResult));
        }