(1 차)

300/60/70
(2 차)

1. 리펙토링

수정 후

수정 전

2. 리펙토링 (쿼리 튜닝)
date, reserved Column 인덱싱

@Query("select distinct d from Designer d join fetch d.reservationTimes r " + "where d.hairshop.id = :hairshopId ") List<Designer> findDesignerFetchJoinByHairshopId(@Param("hairshopId") Long hairshopId);
@Override public List<ReservationTimeResponseDto> getReservationTimeList(Long hairShopId, LocalDate date) { List<Designer> designers = designerRepository.findDesignerFetchJoinByHairshopId(hairShopId); for (Designer designer : designers) { List<ReservationTime> filterReservationTimes = new ArrayList<>(); List<ReservationTime> reservationTimes = designer.getReservationTimes(); for (ReservationTime reservationTime : reservationTimes) { if (reservationTime.getDate().equals(date) && reservationTime.getReserved().equals(false)) { filterReservationTimes.add(reservationTime); } } designer.changeReservationTimes(filterReservationTimes); } return designers.stream() .map(designer -> reservationConverter1.toReservationTimeResponseDto(designer)) .collect(Collectors.toList()); }
@Query("select distinct d from Designer d join fetch d.reservationTimes r " + "where d.hairshop.id = :hairshopId and r.date = :date and r.reserved = false") List<Designer> findDesignerFetchJoinByHairshopIdAndDate(@Param("hairshopId") Long hairshopId, @Param("date") LocalDate date);
@Entity @Table(name = "reservation_time", indexes = @Index(name = "i_reservationTime", columnList = "date")) @Getter @NoArgsConstructor public class ReservationTime {