NotificationEventConsumerProperties.java
package com.ecommerce.notification.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.notification.events")
public record NotificationEventConsumerProperties(
boolean enabled,
@NotBlank String endpoints,
@NotBlank String consumerGroup,
@NotBlank String paymentTopic,
@NotBlank String logisticsTopic,
@Min(0) long initialDelay,
@Min(100) long fixedDelay,
@NotNull Duration awaitDuration,
@NotNull Duration invisibleDuration,
@Min(1) @Max(100) int batchSize) {
public NotificationEventConsumerProperties {
endpoints = defaultText(endpoints, "127.0.0.1:18082");
consumerGroup = defaultText(consumerGroup, "ecommerce-notification-domain-events");
paymentTopic = defaultText(paymentTopic, "ecommerce-payment-events");
logisticsTopic = defaultText(logisticsTopic, "ecommerce-logistics-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;
}
}