FilterSpecificationBuilder.java
package fr.avenirsesr.portfolio.common.data.infrastructure.adapter.specification;
import java.util.Map;
import org.springframework.data.jpa.domain.Specification;
public abstract class FilterSpecificationBuilder<T, K extends Enum<K>> {
public Specification<T> build(Map<K, Object> filters) {
Specification<T> spec = Specification.where(null);
for (var entry : filters.entrySet()) {
Specification<T> s = getSpecification(entry.getKey(), entry.getValue());
if (s != null) {
spec = spec.and(s);
}
}
return spec;
}
protected abstract Specification<T> getSpecification(K key, Object value);
}