Код IT Загрузка примера кода…

Java main.java
public class PaymentProcessor {
    
    public CompletableFuture<PaymentResult> processPaymentAsync(PaymentRequest request) {
        return CompletableFuture.supplyAsync(() -> validateRequest(request))
            .thenCompose(validatedRequest -> authorizePayment(validatedRequest))
            .thenCompose(authorization -> capturePayment(authorization))
            .thenApply(captureResult -> buildPaymentResult(captureResult))
            .exceptionally(ex -> handlePaymentError(ex, request));
    }
    
    private PaymentRequest validateRequest(PaymentRequest request) {
        if (request.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
            throw new IllegalArgumentException("Amount must be positive");
        }
        return request;
    }
    
    private CompletableFuture<Authorization> authorizePayment(PaymentRequest request) {
        return paymentGateway.authorize(request);
    }
    
    private CompletableFuture<CaptureResult> capturePayment(Authorization auth) {
        return paymentGateway.capture(auth);
    }
}
public class PaymentProcessor {
    
    public CompletableFuture<PaymentResult> processPaymentAsync(PaymentRequest request) {
        return CompletableFuture.supplyAsync(() -> validateRequest(request))
            .thenCompose(validatedRequest -> authorizePayment(validatedRequest))
            .thenCompose(authorization -> capturePayment(authorization))
            .thenApply(captureResult -> buildPaymentResult(captureResult))
            .exceptionally(ex -> handlePaymentError(ex, request));
    }
    
    private PaymentRequest validateRequest(PaymentRequest request) {
        if (request.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
            throw new IllegalArgumentException("Amount must be positive");
        }
        return request;
    }
    
    private CompletableFuture<Authorization> authorizePayment(PaymentRequest request) {
        return paymentGateway.authorize(request);
    }
    
    private CompletableFuture<CaptureResult> capturePayment(Authorization auth) {
        return paymentGateway.capture(auth);
    }
}