diff --git a/pemits-api/src/main/java/com/pemits/webcare/api/appointment/repository/spec/AppointmentSpec.java b/pemits-api/src/main/java/com/pemits/webcare/api/appointment/repository/spec/AppointmentSpec.java index bc6cea2..8e5483a 100644 --- a/pemits-api/src/main/java/com/pemits/webcare/api/appointment/repository/spec/AppointmentSpec.java +++ b/pemits-api/src/main/java/com/pemits/webcare/api/appointment/repository/spec/AppointmentSpec.java @@ -16,6 +16,14 @@ public class AppointmentSpec implements Specification { private static final String FILTER_BY_PATIENT_ID = "patient.id"; + private static final String FILTER_BY_PATIENT_NAME = "patient.name"; + private static final String FILTER_BY_DOCTOR_NAME = "doctor.name"; + + private static final String PATIENT = "patient"; + private static final String DOCTOR = "doctor"; + private static final String USER = "user"; + private static final String ID = "id"; + private static final String NAME = "name"; private final String property; private final String value; @@ -30,8 +38,15 @@ public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { switch (property) { case FILTER_BY_PATIENT_ID: - return criteriaBuilder.equal(root.join("patient").get("id"), Long.valueOf(value)); + return criteriaBuilder.equal(root.join(PATIENT).get(ID), Long.valueOf(value)); + case FILTER_BY_PATIENT_NAME: + return criteriaBuilder + .like(root.join(PATIENT).join(USER).get(NAME), "%" + value + "%"); + case FILTER_BY_DOCTOR_NAME: + return criteriaBuilder + .like(root.join(DOCTOR).join(USER).get(NAME), "%" + value + "%"); + default: + return null; } - return null; } }