Skip to content

Commit

Permalink
[merge] 조회 필터링로직 수정 - #158
Browse files Browse the repository at this point in the history
[FIX] 조회 필터링로직 수정 - #158
  • Loading branch information
rlarlgnszx authored Jul 17, 2024
2 parents ac27eea + 2a75299 commit e0bb8e4
Showing 1 changed file with 17 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,29 @@
import jakarta.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiFunction;
import org.dateroad.course.dto.request.CourseGetAllReq;
import org.dateroad.date.domain.Course;
import org.dateroad.date.domain.Region;
import org.springframework.data.jpa.domain.Specification;

public class CourseSpecifications {
public static Specification<Course> filterByCriteria(CourseGetAllReq courseGetAllReq) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
addPredicate(predicates, criteriaBuilder, root, "city", courseGetAllReq.city(), criteriaBuilder::equal);
addPredicate(predicates, criteriaBuilder, root, "city", courseGetAllReq.city(),
(path, value) -> {
if (value == Region.SubRegion.SEOUL_ENTIRE || value == Region.SubRegion.GYEONGGI_ENTIRE || value == Region.SubRegion.INCHEON_ENTIRE) {
return null;
}
return criteriaBuilder.equal(path, value);
});
addPredicate(predicates, criteriaBuilder, root, "country", courseGetAllReq.country(),
criteriaBuilder::equal);
addCostPredicate(predicates, criteriaBuilder, root, courseGetAllReq.cost());
predicates.removeIf(Objects::isNull);
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
Expand All @@ -28,9 +37,12 @@ private static <T> void addPredicate(List<Predicate> predicates, CriteriaBuilder
String attributeName, T value,
BiFunction<Path<T>, T, Predicate> predicateFunction) {
Optional.ofNullable(value)
.ifPresent(val -> predicates.add(
predicateFunction.apply(root.get(attributeName), val))
);
.ifPresent(val -> {
Predicate predicate = predicateFunction.apply(root.get(attributeName), val);
if (predicate != null) {
predicates.add(predicate);
}
});
}

private static void addCostPredicate(List<Predicate> predicates, CriteriaBuilder criteriaBuilder, Root<?> root,
Expand All @@ -50,10 +62,10 @@ private static void addCostPredicate(List<Predicate> predicates, CriteriaBuilder
predicates.add(criteriaBuilder.greaterThan(root.get("cost"), 100000));
break;
default:
predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("cost"), cost));
break;
}
}
}

}

0 comments on commit e0bb8e4

Please sign in to comment.