src/main/java/hexlet/code/specification/TaskSpecification.java
package hexlet.code.specification;
import hexlet.code.dto.TaskParamsDTO;
import hexlet.code.model.Task;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
@Component
public final class TaskSpecification {
public Specification<Task> build(TaskParamsDTO params) {
return withTitleCont(params.getTitleCont())
.and(withAssignee(params.getAssigneeId()))
.and(withStatus(params.getStatus()))
.and(withLabel(params.getLabelId()));
}
private Specification<Task> withTitleCont(String titleCont) {
return (root, query, cb) ->
titleCont == null ? cb.conjunction() : cb.like(root.get("name"), titleCont);
}
private Specification<Task> withAssignee(Long assigneeId) {
return (root, query, cb) ->
assigneeId == null ? cb.conjunction() : cb.equal(root.get("assignee").get("id"), assigneeId);
}
private Specification<Task> withStatus(String status) {
return (root, query, cb) ->
status == null ? cb.conjunction() : cb.equal(root.get("taskStatus").get("slug"), status);
}
private Specification<Task> withLabel(Long labelId) {
return (root, query, cb) ->
labelId == null ? cb.conjunction() : cb.equal(root.get("labels").get("id"), labelId);
}
}