public async Task <IActionResult> GetProviderVersionMetadata(string providerVersionId)
        {
            Guard.IsNullOrWhiteSpace(providerVersionId, nameof(providerVersionId));

            string cacheKey = $"{CacheKeys.ProviderVersionMetadata}:{providerVersionId}";

            ProviderVersionMetadataDto result = await _cachePolicy.ExecuteAsync(() => _cacheProvider.GetAsync <ProviderVersionMetadataDto>(cacheKey));

            if (result == null)
            {
                ProviderVersionMetadata providerVersionMetadata =
                    await _providerVersionMetadataRepositoryPolicy.ExecuteAsync(() => _providerVersionMetadataRepository.GetProviderVersionMetadata(providerVersionId));

                if (providerVersionMetadata != null)
                {
                    result = _mapper.Map <ProviderVersionMetadataDto>(providerVersionMetadata);

                    await _cachePolicy.ExecuteAsync(() => _cacheProvider.SetAsync(cacheKey, result));
                }
            }

            if (result == null)
            {
                return(new NotFoundResult());
            }

            return(new OkObjectResult(result));
        }
Beispiel #2
0
        public SetFundingStreamCurrentProviderVersionRequestValidator(IProviderVersionsMetadataRepository providerVersions,
                                                                      IPoliciesApiClient policiesApiClient,
                                                                      IProvidersResiliencePolicies resiliencePolicies)
        {
            Guard.ArgumentNotNull(providerVersions, nameof(providerVersions));
            Guard.ArgumentNotNull(policiesApiClient, nameof(policiesApiClient));
            Guard.ArgumentNotNull(resiliencePolicies?.ProviderVersionMetadataRepository, nameof(resiliencePolicies.ProviderVersionMetadataRepository));
            Guard.ArgumentNotNull(resiliencePolicies?.PoliciesApiClient, nameof(resiliencePolicies.PoliciesApiClient));

            RuleFor(_ => _.FundingStreamId)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .NotEmpty()
            .CustomAsync(async(fundingStreamId,
                               context,
                               cancellationToken) =>
            {
                ApiResponse <FundingStream> response = await resiliencePolicies.PoliciesApiClient.ExecuteAsync(() =>
                                                                                                               policiesApiClient.GetFundingStreamById(fundingStreamId));

                if (response?.Content == null)
                {
                    context.AddFailure(new ValidationFailure("FundingStreamId",
                                                             $"No funding stream located with Id {fundingStreamId}"));
                }
            });

            RuleFor(_ => _.ProviderVersionId)
            .Cascade(CascadeMode.StopOnFirstFailure)
            .NotEmpty()
            .CustomAsync(async(providerVersionId,
                               context,
                               cancellationToken) =>
            {
                ProviderVersionMetadata response = await resiliencePolicies.ProviderVersionMetadataRepository.ExecuteAsync(() =>
                                                                                                                           providerVersions.GetProviderVersionMetadata(providerVersionId));

                if (response == null)
                {
                    context.AddFailure(new ValidationFailure("ProviderVersionId",
                                                             $"No provider version located with Id {providerVersionId}"));
                }
            });
        }