ConfigurationSpecification.java

package fr.avenirsesr.portfolio.api.infrastructure.adapter.specification;

import fr.avenirsesr.portfolio.api.domain.model.enums.EConfiguration;
import fr.avenirsesr.portfolio.api.infrastructure.adapter.model.ConfigurationEntity;
import jakarta.persistence.criteria.Predicate;
import java.util.ArrayList;
import java.util.List;
import org.springframework.data.jpa.domain.Specification;

public class ConfigurationSpecification {
  public static Specification<ConfigurationEntity> byAnyName(
      List<EConfiguration> eConfigurationList) {

    return (root, query, criteriaBuilder) -> {
      if (eConfigurationList == null || eConfigurationList.isEmpty()) {
        return criteriaBuilder.conjunction();
      }

      List<Predicate> predicates = new ArrayList<>();
      for (EConfiguration configuration : eConfigurationList) {
        predicates.add(
            criteriaBuilder.like(
                criteriaBuilder.lower(root.get("name")),
                "%" + configuration.name().toLowerCase() + "%"));
      }

      return criteriaBuilder.or(predicates.toArray(new Predicate[0]));
    };
  }
}