RecycleBinPolicy.java
package org.darkroomlibrary.service.support;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.Clock;
import java.time.LocalDateTime;
/**
* Single retention policy for recoverable business content.
*/
@Component
public class RecycleBinPolicy {
private final int retentionDays;
private final Clock applicationClock;
public RecycleBinPolicy(
@Value("${recycle-bin.retention-days:30}") int retentionDays,
Clock applicationClock) {
if (retentionDays < 1 || retentionDays > 365) {
throw new IllegalArgumentException("recycle-bin.retention-days must be between 1 and 365");
}
this.retentionDays = retentionDays;
this.applicationClock = applicationClock;
}
public int retentionDays() {
return retentionDays;
}
public LocalDateTime restoreDeadline(LocalDateTime deletedAt) {
return deletedAt.plusDays(retentionDays);
}
public LocalDateTime now() {
return LocalDateTime.now(applicationClock);
}
}