Skip to content

Commit aca9c04

Browse files
authored
Merge pull request #15 from DO-SOPT-CDS-TEAM-WEB7/feat/#14
[#14] feat : 나라별 예약 최저가격 순으로 조회하기
2 parents e47137c + fd137df commit aca9c04

File tree

6 files changed

+41
-19
lines changed

6 files changed

+41
-19
lines changed

skyscanner/src/main/java/org/third/thirdseminar/controller/dto/response/AirReservationResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public record AirReservationResponse(
66
DateDto dateDto,
7-
List<AirDto> airDto
7+
List<ReservationDto> reservationListDto
88

99
){
1010
}

skyscanner/src/main/java/org/third/thirdseminar/controller/dto/response/AirDto.java renamed to skyscanner/src/main/java/org/third/thirdseminar/controller/dto/response/ReservationDto.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
import org.third.thirdseminar.domain.Reservation;
44

5-
public record AirDto (
6-
Long airId,
5+
public record ReservationDto (
6+
Long reservationId,
77
String airName,
88
TimeRangeDto startTime,
99
TimeRangeDto endTime,
1010
String price,
1111
int CO2
1212
){
13-
public static AirDto of(Reservation reservation, String price, TimeRangeDto startTime, TimeRangeDto endTime) {
14-
return new AirDto(
13+
public static ReservationDto of(Reservation reservation, String price, TimeRangeDto startTime, TimeRangeDto endTime) {
14+
return new ReservationDto(
1515
reservation.getId(),
1616
reservation.getAir().getAirName(),
1717
startTime,

skyscanner/src/main/java/org/third/thirdseminar/controller/dto/response/TimeRangeDto.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33

44
public record TimeRangeDto (
5-
String startTime,
6-
String endTime,
5+
String start,
6+
String end,
77
String during){
8-
public static TimeRangeDto of(String startTime, String endTime, String during) {
8+
public static TimeRangeDto of(String start, String end, String during) {
99
return new TimeRangeDto(
10-
startTime, endTime, during
10+
start, end, during
1111
);
1212
}
1313
}
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: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +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
import java.util.Optional;
1014

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

19+
20+
@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")
21+
List<Object[]> findReservations(@Param("country") String country);
22+
23+
1524
Optional<Reservation> findById(Long reservationId);
1625
}

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,12 @@
55
import org.springframework.stereotype.Service;
66
import org.springframework.transaction.annotation.Transactional;
77
import org.third.thirdseminar.controller.dto.request.AirReservationRequest;
8-
import org.third.thirdseminar.controller.dto.response.AirDto;
98
import org.third.thirdseminar.controller.dto.response.AirReservationResponse;
109
import org.third.thirdseminar.controller.dto.response.DateDto;
1110
import org.third.thirdseminar.controller.dto.response.TimeRangeDto;
1211
import org.third.thirdseminar.controller.dto.request.CreateReservationRequest;
1312
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;
13+
import org.third.thirdseminar.domain.*;
1814
import org.third.thirdseminar.infrastructure.ReservationJpaRepository;
1915
import org.third.thirdseminar.infrastructure.ReservationResultJpaRepository;
2016
import org.third.thirdseminar.infrastructure.TicketJpaRepository;
@@ -39,12 +35,17 @@ public class ReservationService {
3935
private final DecimalFormat df = new DecimalFormat("###,###");
4036

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

44-
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())));
44+
45+
List<ReservationDto> airList = new ArrayList<>();
46+
for(ReservationMinPriceDTO reservationMinPriceDTO : reservationMinPriceDtoList){
47+
Reservation reservation = reservationMinPriceDTO.reservation();
48+
airList.add(ReservationDto.of(reservation, df.format(reservationMinPriceDTO.minPrice()), TimeRangeFormat(reservation.getStartTime()), TimeRangeFormat(reservation.getEndTime())));
4849
}
4950
DateDto dateDto = new DateDto(reqeust.startDate(), reqeust.endDate());
5051
return new AirReservationResponse(dateDto, airList);

0 commit comments

Comments
 (0)