PlaceOrderResult.java

package com.dmasone.identity.orders.application;

import com.dmasone.identity.orders.domain.CustomerOrder;

/**
 * Result of the placement use case. It distinguishes a newly created order
 * from an idempotent replay so the REST layer can return precise HTTP
 * semantics without leaking transport concepts into the domain aggregate.
 */
public record PlaceOrderResult(OrderResponse order, boolean replayed) {

    public static PlaceOrderResult placed(CustomerOrder order) {
        return new PlaceOrderResult(OrderResponse.from(order), false);
    }

    public static PlaceOrderResult replayed(CustomerOrder order) {
        return new PlaceOrderResult(OrderResponse.from(order), true);
    }
}