Skip to content

Commit

Permalink
[#14] feat : 나라별 예약 최저가격 순으로 조회
Browse files Browse the repository at this point in the history
  • Loading branch information
mmihye committed Nov 27, 2023
1 parent 4069ee5 commit a8f9c22
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.third.thirdseminar.domain;


public record ReservationMinPriceDTO (
Reservation reservation,
Long minPrice
){
public static ReservationMinPriceDTO of(Reservation reservation,Long minPrice) {
return new ReservationMinPriceDTO(reservation, minPrice);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,23 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.third.thirdseminar.controller.dto.response.AirDto;
import org.third.thirdseminar.domain.Reservation;
import org.third.thirdseminar.domain.ReservationMinPriceDTO;

import java.util.List;
import java.util.Map;
import java.util.Objects;

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

Reservation findByAir_AirId(@Param("airId") Long airId);


@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")
List<Object[]> findReservations(@Param("country") String country);


}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@
import org.third.thirdseminar.controller.dto.response.TimeRangeDto;
import org.third.thirdseminar.controller.dto.request.CreateReservationRequest;
import org.third.thirdseminar.controller.dto.response.*;
import org.third.thirdseminar.domain.Reservation;
import org.third.thirdseminar.domain.ReservationResult;
import org.third.thirdseminar.domain.Ticket;
import org.third.thirdseminar.domain.TimeRange;
import org.third.thirdseminar.domain.*;
import org.third.thirdseminar.infrastructure.ReservationJpaRepository;
import org.third.thirdseminar.infrastructure.ReservationResultJpaRepository;
import org.third.thirdseminar.infrastructure.TicketJpaRepository;
Expand All @@ -39,12 +36,17 @@ public class ReservationService {
private final DecimalFormat df = new DecimalFormat("###,###");

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


List<AirDto> airList = new ArrayList<>();
for(Reservation reservation : reservations){
List<Ticket> ticket= tickectJpaRepository.findByReservationIdOrderByPriceAsc(reservation.getId());
airList.add(AirDto.of(reservation, df.format(ticket.get(0).getPrice()), TimeRangeFormat(reservation.getStartTime()), TimeRangeFormat(reservation.getEndTime())));
for(ReservationMinPriceDTO reservationMinPriceDTO : reservationMinPriceDtoList){
Reservation reservation = reservationMinPriceDTO.reservation();
airList.add(AirDto.of(reservation, df.format(reservationMinPriceDTO.minPrice()), TimeRangeFormat(reservation.getStartTime()), TimeRangeFormat(reservation.getEndTime())));
}
DateDto dateDto = new DateDto(reqeust.startDate(), reqeust.endDate());
return new AirReservationResponse(dateDto, airList);
Expand Down

0 comments on commit a8f9c22

Please sign in to comment.