NastasiyaT/java-project-99

View on GitHub
src/main/java/hexlet/code/specification/TaskSpecification.java

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
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);
    }
}