MarketingPricingLockFailure.java

package com.ecommerce.trade.infrastructure.resilience;

import org.springframework.http.HttpStatusCode;

public final class MarketingPricingLockFailure extends RuntimeException {

    private final boolean retryable;
    private final boolean recordable;

    private MarketingPricingLockFailure(
            String message,
            boolean retryable,
            boolean recordable,
            Throwable cause) {
        super(message, cause);
        this.retryable = retryable;
        this.recordable = recordable;
    }

    public static MarketingPricingLockFailure forHttpStatus(HttpStatusCode status, Throwable cause) {
        boolean serverFailure = status.is5xxServerError();
        return new MarketingPricingLockFailure(
                "Marketing pricing lock returned HTTP " + status.value(),
                serverFailure,
                serverFailure,
                cause);
    }

    public static MarketingPricingLockFailure transientFailure(Throwable cause) {
        return new MarketingPricingLockFailure(
                "Marketing pricing lock transport failed", true, true, cause);
    }

    public static MarketingPricingLockFailure invalidResponse() {
        return invalidResponse(null);
    }

    public static MarketingPricingLockFailure invalidResponse(Throwable cause) {
        return new MarketingPricingLockFailure(
                "Marketing pricing lock returned an invalid response", false, true, cause);
    }

    public boolean retryable() {
        return retryable;
    }

    public boolean recordable() {
        return recordable;
    }
}