FraudCheckDecorator.java

package com.designpatterns.structural.decorator.applied;

public class FraudCheckDecorator extends TransactionProcessorDecorator {

    private static final long SUSPICIOUS_AMOUNT_CENTS = 50_000_00L;

    public FraudCheckDecorator(TransactionProcessor delegate) {
        super(delegate);
    }

    @Override
    public ProcessingResult process(Transaction transaction) {
        ProcessingResult result = delegate.process(transaction);
        if (transaction.amountCents() >= SUSPICIOUS_AMOUNT_CENTS) {
            return result.withNoteAndApproval("fraud-check: amount above threshold, held for review", false);
        }
        return result.withNote("fraud-check: amount within normal range");
    }
}