Skip to content

Commit a8f9c22

Browse files
committed
[#14] feat : 나라별 예약 최저가격 순으로 조회
1 parent 4069ee5 commit a8f9c22

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.third.thirdseminar.domain;
2+
3+
4+
public record ReservationMinPriceDTO (
5+
Reservation reservation,
6+
Long minPrice
7+
){
8+
public static ReservationMinPriceDTO of(Reservation reservation,Long minPrice) {
9+
return new ReservationMinPriceDTO(reservation, minPrice);
10+
}
11+
12+
}

skyscanner/src/main/java/org/third/thirdseminar/infrastructure/ReservationJpaRepository.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,23 @@
33
import org.springframework.data.jpa.repository.JpaRepository;
44
import org.springframework.data.jpa.repository.Query;
55
import org.springframework.data.repository.query.Param;
6+
import org.third.thirdseminar.controller.dto.response.AirDto;
67
import org.third.thirdseminar.domain.Reservation;
8+
import org.third.thirdseminar.domain.ReservationMinPriceDTO;
79

810
import java.util.List;
11+
import java.util.Map;
12+
import java.util.Objects;
913

1014
public interface ReservationJpaRepository extends JpaRepository<Reservation, Long> {
1115
@Query("SELECT r FROM Reservation r WHERE r.cityName <> :cityName")
1216
List<Reservation> findAllExcludingCity(@Param("cityName") String cityName);
1317

1418
Reservation findByAir_AirId(@Param("airId") Long airId);
19+
20+
21+
@Query("SELECT r, MIN(t.price) FROM Reservation r JOIN r.tickets t WHERE r.country = :country GROUP BY r ORDER BY MIN(t.price) ASC")
22+
List<Object[]> findReservations(@Param("country") String country);
23+
24+
1525
}

skyscanner/src/main/java/org/third/thirdseminar/service/ReservationService.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111
import org.third.thirdseminar.controller.dto.response.TimeRangeDto;
1212
import org.third.thirdseminar.controller.dto.request.CreateReservationRequest;
1313
import org.third.thirdseminar.controller.dto.response.*;
14-
import org.third.thirdseminar.domain.Reservation;
15-
import org.third.thirdseminar.domain.ReservationResult;
16-
import org.third.thirdseminar.domain.Ticket;
17-
import org.third.thirdseminar.domain.TimeRange;
14+
import org.third.thirdseminar.domain.*;
1815
import org.third.thirdseminar.infrastructure.ReservationJpaRepository;
1916
import org.third.thirdseminar.infrastructure.ReservationResultJpaRepository;
2017
import org.third.thirdseminar.infrastructure.TicketJpaRepository;
@@ -39,12 +36,17 @@ public class ReservationService {
3936
private final DecimalFormat df = new DecimalFormat("###,###");
4037

4138
public AirReservationResponse getReservations(AirReservationRequest reqeust){
42-
List<Reservation> reservations = reservationJpaRepository.findAll();
39+
List<ReservationMinPriceDTO> reservationMinPriceDtoList = reservationJpaRepository.findReservations("일본").stream().map(
40+
row -> ReservationMinPriceDTO.of(
41+
(Reservation) row[0],
42+
(Long) row[1]
43+
)).toList();
44+
4345

4446
List<AirDto> airList = new ArrayList<>();
45-
for(Reservation reservation : reservations){
46-
List<Ticket> ticket= tickectJpaRepository.findByReservationIdOrderByPriceAsc(reservation.getId());
47-
airList.add(AirDto.of(reservation, df.format(ticket.get(0).getPrice()), TimeRangeFormat(reservation.getStartTime()), TimeRangeFormat(reservation.getEndTime())));
47+
for(ReservationMinPriceDTO reservationMinPriceDTO : reservationMinPriceDtoList){
48+
Reservation reservation = reservationMinPriceDTO.reservation();
49+
airList.add(AirDto.of(reservation, df.format(reservationMinPriceDTO.minPrice()), TimeRangeFormat(reservation.getStartTime()), TimeRangeFormat(reservation.getEndTime())));
4850
}
4951
DateDto dateDto = new DateDto(reqeust.startDate(), reqeust.endDate());
5052
return new AirReservationResponse(dateDto, airList);

0 commit comments

Comments
 (0)