ReviewEventConsumerProperties.java

package com.ecommerce.catalog.infrastructure.config;

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

import java.time.Duration;

@Validated
@ConfigurationProperties("ecommerce.catalog.review-events")
public record ReviewEventConsumerProperties(
        boolean enabled,
        @NotBlank String endpoints,
        @NotBlank String consumerGroup,
        @NotBlank String topic,
        @Min(0) long initialDelay,
        @Min(100) long fixedDelay,
        @NotNull Duration awaitDuration,
        @NotNull Duration invisibleDuration,
        @Min(1) @Max(100) int batchSize) {

    public ReviewEventConsumerProperties {
        endpoints = defaultText(endpoints, "127.0.0.1:18082");
        consumerGroup = defaultText(
                consumerGroup,
                "ecommerce-catalog-order-completed-reviews");
        topic = defaultText(topic, "ecommerce-order-events");
        fixedDelay = fixedDelay <= 0 ? 500 : fixedDelay;
        awaitDuration = awaitDuration == null
                ? Duration.ofSeconds(5)
                : awaitDuration;
        invisibleDuration = invisibleDuration == null
                ? Duration.ofSeconds(20)
                : invisibleDuration;
        batchSize = batchSize <= 0 ? 20 : batchSize;
    }

    private static String defaultText(String value, String fallback) {
        return value == null || value.isBlank() ? fallback : value;
    }
}