OrderProperties.java

package com.ecommerce.trade.infrastructure.config;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;

import java.time.Duration;

@Validated
@ConfigurationProperties("ecommerce.trade.order")
public record OrderProperties(
        @NotBlank String defaultWarehouseCode,
        Duration paymentTimeout,
        Duration reservationGrace,
        boolean recoveryEnabled,
        @Positive long recoveryDelay,
        @Positive int recoveryBatchSize,
        @NotNull Duration recoveryLease
) {
    public OrderProperties {
        paymentTimeout = paymentTimeout == null ? Duration.ofMinutes(15) : paymentTimeout;
        reservationGrace = reservationGrace == null ? Duration.ofMinutes(5) : reservationGrace;
        recoveryLease = recoveryLease == null ? Duration.ofSeconds(30) : recoveryLease;
    }
}