WorkflowOutboxRetentionCandidate.java
package org.hammer.audio.workflow.collaboration.retention;
import java.time.Instant;
import java.util.Objects;
/**
* Immutable published-event candidate captured by one retention plan.
*
* @param eventId stable outbox event identifier
* @param sessionId owning collaboration session identifier
* @param publishedAt durable publication timestamp
* @param reason eligibility reason evaluated when the plan was created
*/
public record WorkflowOutboxRetentionCandidate(
String eventId, String sessionId, Instant publishedAt, WorkflowOutboxRetentionReason reason) {
public WorkflowOutboxRetentionCandidate {
eventId = requireNotBlank(eventId, "eventId");
sessionId = requireNotBlank(sessionId, "sessionId");
Objects.requireNonNull(publishedAt, "publishedAt");
Objects.requireNonNull(reason, "reason");
}
private static String requireNotBlank(String value, String name) {
Objects.requireNonNull(value, name);
if (value.isBlank()) {
throw new IllegalArgumentException(name + " must not be blank");
}
return value;
}
}