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)); }
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}")); } }); }