Skip to content

Commit 93c3c19

Browse files
committed
add code review adjustments
1 parent cd871c3 commit 93c3c19

File tree

9 files changed

+77
-101
lines changed

9 files changed

+77
-101
lines changed

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepository.java

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,46 @@
1515
import java.util.ArrayList;
1616
import java.util.List;
1717
import java.util.Objects;
18-
import java.util.Optional;
1918

2019

2120
@Repository
2221
public interface AppointmentRepository extends BaseJpaRepository<AppointmentEntity, Long> {
2322

24-
default List<AppointmentEntity> findByCriteria(AppointmentCriteria appointmentCriteria) {
25-
Objects.requireNonNull(appointmentCriteria, "appointmentCriteria must not be null");
23+
default List<AppointmentEntity> findByCriteria(AppointmentCriteria criteria) {
24+
Objects.requireNonNull(criteria, "criteria must not be null");
2625

2726
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
2827
CriteriaQuery<AppointmentEntity> cq = cb.createQuery(AppointmentEntity.class);
2928
Root<AppointmentEntity> root = cq.from(AppointmentEntity.class);
3029
List<Predicate> predicates = new ArrayList<>();
3130

32-
Optional.ofNullable(appointmentCriteria.treatmentName())
33-
.map(String::trim)
34-
.filter(name -> !name.isEmpty())
35-
.ifPresent(name -> {
36-
Join<AppointmentEntity, TreatmentEntity> treatmentJoin = root.join("treatment", JoinType.LEFT);
37-
predicates.add(cb.like(cb.lower(treatmentJoin.get("name")), "%" + name.toLowerCase() + "%"));
38-
});
39-
40-
Optional.ofNullable(appointmentCriteria.startDate())
41-
.ifPresent(startDate -> predicates.add(cb.greaterThanOrEqualTo(root.get("dateTime"), startDate))
42-
);
43-
44-
Optional.ofNullable(appointmentCriteria.endDate())
45-
.ifPresent(endDate -> predicates.add(cb.lessThanOrEqualTo(root.get("dateTime"), endDate)));
46-
47-
Optional.ofNullable(appointmentCriteria.status())
48-
.ifPresent(status -> predicates.add(cb.equal(root.get("status"), status)));
49-
50-
Optional.ofNullable(appointmentCriteria.clientId())
51-
.ifPresent(clientId -> {
52-
Join<AppointmentEntity, ClientEntity> clientJoin = root.join("client", JoinType.LEFT);
53-
predicates.add(cb.equal(clientJoin.get("id"), clientId));
54-
});
55-
56-
Optional.ofNullable(appointmentCriteria.specialistId())
57-
.ifPresent(specialistId -> {
58-
Join<AppointmentEntity, TreatmentEntity> treatmentJoin = root.join("treatment", JoinType.LEFT);
59-
Join<TreatmentEntity, SpecialistEntity> specialistJoin = treatmentJoin.join("specialist", JoinType.LEFT);
60-
predicates.add(cb.equal(specialistJoin.get("id"), specialistId));
61-
});
31+
if (criteria.treatmentName() != null && !criteria.treatmentName().trim().isEmpty()) {
32+
Join<AppointmentEntity, TreatmentEntity> treatmentJoin = root.join("treatment", JoinType.LEFT);
33+
predicates.add(cb.like(cb.lower(treatmentJoin.get("name")), "%" + criteria.treatmentName().trim().toLowerCase() + "%"));
34+
}
35+
36+
if (criteria.startDate() != null) {
37+
predicates.add(cb.greaterThanOrEqualTo(root.get("dateTime"), criteria.startDate()));
38+
}
39+
40+
if (criteria.endDate() != null) {
41+
predicates.add(cb.lessThanOrEqualTo(root.get("dateTime"), criteria.endDate()));
42+
}
43+
44+
if (criteria.status() != null) {
45+
predicates.add(cb.equal(root.get("status"), criteria.status()));
46+
}
47+
48+
if (criteria.clientId() != null) {
49+
Join<AppointmentEntity, ClientEntity> clientJoin = root.join("client", JoinType.LEFT);
50+
predicates.add(cb.equal(clientJoin.get("id"), criteria.clientId()));
51+
}
52+
53+
if (criteria.specialistId() != null) {
54+
Join<AppointmentEntity, TreatmentEntity> treatmentJoin = root.join("treatment", JoinType.LEFT);
55+
Join<TreatmentEntity, SpecialistEntity> specialistJoin = treatmentJoin.join("specialist", JoinType.LEFT);
56+
predicates.add(cb.equal(specialistJoin.get("id"), criteria.specialistId()));
57+
}
6258

6359
cq.where(predicates.toArray(new Predicate[0]));
6460
return getEntityManager().createQuery(cq).getResultList();
@@ -83,4 +79,5 @@ SELECT CASE WHEN COUNT(a) > 0 THEN TRUE ELSE FALSE END
8379
AND a.dateTime = :date
8480
""")
8581
boolean hasConflictingAppointmentBySpecialistIdAndDateTime(@Param("specialistId") Long specialistId, @Param("date") Instant date);
82+
8683
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.capgemini.training.appointmentbooking.dataaccess.repository;
22

33
import jakarta.persistence.EntityManager;
4-
import org.springframework.data.jpa.repository.JpaRepository;
54
import org.springframework.data.jpa.repository.support.JpaRepositoryImplementation;
65
import org.springframework.data.repository.NoRepositoryBean;
76

87
@NoRepositoryBean
98
public interface BaseJpaRepository<T, ID> extends JpaRepositoryImplementation<T, ID> {
9+
1010
EntityManager getEntityManager();
11-
}
11+
12+
}

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepository.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import com.capgemini.training.appointmentbooking.dataaccess.entity.QClientEntity;
55
import com.capgemini.training.appointmentbooking.dataaccess.entity.QUserEntity;
66
import com.querydsl.jpa.impl.JPAQueryFactory;
7-
import jakarta.persistence.EntityManager;
8-
import org.springframework.data.jpa.repository.JpaRepository;
97
import org.springframework.stereotype.Repository;
108

119
import java.util.List;
@@ -26,4 +24,5 @@ default List<ClientEntity> findByName(String firstName, String lastName) {
2624
.and(user.lastname.eq(lastName)))
2725
.fetch();
2826
}
27+
2928
}

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/CustomUserRepository.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ default List<SpecialistEntity> findSpecialistByName(String firstName, String las
2929
.fetch();
3030

3131
}
32+
3233
}

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.capgemini.training.appointmentbooking.dataaccess.repository.criteria.TreatmentCriteria;
77
import com.querydsl.core.types.dsl.BooleanExpression;
88
import com.querydsl.jpa.impl.JPAQuery;
9-
import jakarta.persistence.EntityManager;
109
import org.springframework.stereotype.Repository;
1110

1211
import java.util.List;
@@ -42,4 +41,5 @@ default List<TreatmentEntity> findByCriteria(TreatmentCriteria treatmentCriteria
4241
.where(predicate)
4342
.fetch();
4443
}
44+
4545
}
Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,44 @@
11
package com.capgemini.training.appointmentbooking.dataaccess.repository;
22

33
import com.capgemini.training.appointmentbooking.dataaccess.entity.UserEntity;
4-
import org.springframework.data.jpa.repository.JpaRepository;
4+
import com.capgemini.training.appointmentbooking.dataaccess.repository.criteria.UserCriteria;
5+
import jakarta.persistence.EntityManager;
6+
import jakarta.persistence.criteria.CriteriaBuilder;
7+
import jakarta.persistence.criteria.CriteriaQuery;
8+
import jakarta.persistence.criteria.Predicate;
9+
import jakarta.persistence.criteria.Root;
510
import org.springframework.stereotype.Repository;
611

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import java.util.Objects;
15+
716
@Repository
8-
public interface UserRepository extends JpaRepository<UserEntity, Long>, CustomUserRepository {
17+
public interface UserRepository extends BaseJpaRepository<UserEntity, Long> {
18+
19+
default List<UserEntity> findByCriteria(UserCriteria criteria) {
20+
Objects.requireNonNull(criteria, "criteria must not be null");
21+
22+
EntityManager entityManager = getEntityManager();
23+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
24+
CriteriaQuery<UserEntity> cq = cb.createQuery(UserEntity.class);
25+
Root<UserEntity> root = cq.from(UserEntity.class);
26+
List<Predicate> predicates = new ArrayList<>();
27+
28+
if (criteria.firstName() != null) {
29+
predicates.add(cb.like(root.get("firstname"), criteria.firstName()));
30+
}
31+
32+
if (criteria.lastName() != null) {
33+
predicates.add(cb.like(root.get("lastname"), criteria.lastName()));
34+
}
35+
36+
if (criteria.email() != null) {
37+
predicates.add(cb.like(root.get("email"), criteria.email()));
38+
}
39+
40+
cq.where(predicates.toArray(new Predicate[0]));
41+
return entityManager.createQuery(cq).getResultList();
42+
}
43+
944
}

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/impl/BaseJpaRepositoryImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import jakarta.persistence.EntityManager;
55
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
66
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
7-
import org.springframework.stereotype.Repository;
87

9-
public class BaseJpaRepositoryImpl <T, ID> extends SimpleJpaRepository<T, ID> implements BaseJpaRepository<T, ID> {
8+
public class BaseJpaRepositoryImpl<T, ID> extends SimpleJpaRepository<T, ID> implements BaseJpaRepository<T, ID> {
109

1110
private final EntityManager entityManager;
1211

@@ -16,7 +15,8 @@ public class BaseJpaRepositoryImpl <T, ID> extends SimpleJpaRepository<T, ID> i
1615
}
1716

1817
@Override
19-
public EntityManager getEntityManager(){
18+
public EntityManager getEntityManager() {
2019
return this.entityManager;
2120
}
22-
}
21+
22+
}

src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/impl/CustomUserRepositoryImpl.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)