DateFilterSpecificationBuilder.java
package fr.avenirsesr.portfolio.common.data.infrastructure.adapter.specification;
import fr.avenirsesr.portfolio.common.data.domain.model.enums.EDateFilterKey;
import java.time.LocalDate;
import org.springframework.data.jpa.domain.Specification;
public class DateFilterSpecificationBuilder<T>
extends FilterSpecificationBuilder<T, EDateFilterKey> {
@Override
public Specification<T> getSpecification(EDateFilterKey key, Object value) {
return switch (key) {
case FROM_DATE -> fromDate((LocalDate) value);
case TO_DATE -> toDate((LocalDate) value);
};
}
private Specification<T> fromDate(LocalDate date) {
return (root, query, cb) ->
date == null ? null : cb.greaterThanOrEqualTo(root.get("createdAt"), date.atStartOfDay());
}
private Specification<T> toDate(LocalDate date) {
return (root, query, cb) ->
date == null ? null : cb.lessThan(root.get("createdAt"), date.plusDays(1).atStartOfDay());
}
}