public Task <ApiResult <ApiPreapprovalResponse> > CreatePreapprovalAsync(ApiPreapprovalRequest preapprovalRequest,
                                                                                 CancellationToken cancellationToken)
        {
            preapprovalRequest.ThrowIfNull(nameof(preapprovalRequest));
            cancellationToken.ThrowIfNull(nameof(cancellationToken));
            preapprovalRequest.Preapproval.ThrowIfNull(nameof(preapprovalRequest.Preapproval));

            var validationResult = _preapprovalRequestValidator.Validate(preapprovalRequest.Preapproval);

            if (!validationResult.IsValid)
            {
                return(validationResult.ToValidationException().ToApiResult <ApiPreapprovalResponse>().ToAwaitable());
            }

            var uri     = new Uri(BaseAddress, PreapprovalUrl);
            var request = preapprovalRequest.ToHttpRequest(HttpMethod.Post, uri);

            return(HttpClient.InvokeAsync <ApiPreapprovalResponse>(request, cancellationToken));
        }
        public Task <ApiResult <ApiPreapprovalResponse> > ChangePreapprovalAsync(int preapprovalId,
                                                                                 ApiPreapprovalRequest preapprovalRequest, CancellationToken cancellationToken)
        {
            preapprovalId.ThrowIfNotCondition(id => id > 0, nameof(preapprovalId));
            preapprovalRequest.ThrowIfNull(nameof(preapprovalRequest));
            cancellationToken.ThrowIfNull(nameof(cancellationToken));
            preapprovalRequest.Preapproval.ThrowIfNull(nameof(preapprovalRequest.Preapproval));

            var validationResult = _preapprovalRequestValidator.Validate(preapprovalRequest.Preapproval);

            if (!validationResult.IsValid)
            {
                return(validationResult.ToValidationException().ToApiResult <ApiPreapprovalResponse>().ToAwaitable());
            }

            var uri     = GetPreapprovalUri(preapprovalId);
            var request = preapprovalRequest.ToHttpRequest(Constants.HttpMethodPatch, uri);

            return(HttpClient.InvokeAsync <ApiPreapprovalResponse>(request, cancellationToken));
        }
 public Task <ApiResult <ApiPreapprovalResponse> > ChangePreapprovalAsync(int preapprovalId,
                                                                          ApiPreapprovalRequest preapprovalRequest, string idempotencyToken)
 {
     return(ChangePreapprovalAsync(preapprovalId, preapprovalRequest, idempotencyToken,
                                   CancellationToken.None));
 }
 public Task <ApiResult <ApiPreapprovalResponse> > ChangePreapprovalAsync(int preapprovalId,
                                                                          ApiPreapprovalRequest preapprovalRequest)
 {
     return(ChangePreapprovalAsync(preapprovalId, preapprovalRequest, CancellationToken.None));
 }
 public Task <ApiResult <ApiPreapprovalResponse> > CreatePreapprovalAsync(ApiPreapprovalRequest preapprovalRequest)
 {
     return(CreatePreapprovalAsync(preapprovalRequest, CancellationToken.None));
 }