diff --git a/src/main/java/site/campingon/campingon/reservation/dto/CampAddrResponseDto.java b/src/main/java/site/campingon/campingon/reservation/dto/CampAddrResponseDto.java index d9c7cfb8..592c02b6 100644 --- a/src/main/java/site/campingon/campingon/reservation/dto/CampAddrResponseDto.java +++ b/src/main/java/site/campingon/campingon/reservation/dto/CampAddrResponseDto.java @@ -9,14 +9,14 @@ @AllArgsConstructor public class CampAddrResponseDto { - private String city; + public String streetAddr; +/* + // 유지보수를 고려해 주석 처리 + private String city; private String state; - private String zipcode; - - private String streetAddr; - private String detailedAddr; +*/ } diff --git a/src/main/java/site/campingon/campingon/reservation/dto/CampResponseDto.java b/src/main/java/site/campingon/campingon/reservation/dto/CampResponseDto.java index 1db810a2..c59fcda7 100644 --- a/src/main/java/site/campingon/campingon/reservation/dto/CampResponseDto.java +++ b/src/main/java/site/campingon/campingon/reservation/dto/CampResponseDto.java @@ -9,7 +9,7 @@ @AllArgsConstructor public class CampResponseDto { - private Long id; + private Long campId; private String campName; diff --git a/src/main/java/site/campingon/campingon/reservation/dto/CampSiteResponseDto.java b/src/main/java/site/campingon/campingon/reservation/dto/CampSiteResponseDto.java index e186dbb8..3e158e24 100644 --- a/src/main/java/site/campingon/campingon/reservation/dto/CampSiteResponseDto.java +++ b/src/main/java/site/campingon/campingon/reservation/dto/CampSiteResponseDto.java @@ -10,7 +10,7 @@ @AllArgsConstructor public class CampSiteResponseDto { - private Long id; + private Long siteId; private String indoorFacility; diff --git a/src/main/java/site/campingon/campingon/reservation/mapper/ReservationMapper.java b/src/main/java/site/campingon/campingon/reservation/mapper/ReservationMapper.java index 79a7dd49..7ee2cccd 100644 --- a/src/main/java/site/campingon/campingon/reservation/mapper/ReservationMapper.java +++ b/src/main/java/site/campingon/campingon/reservation/mapper/ReservationMapper.java @@ -26,9 +26,9 @@ public interface ReservationMapper { Reservation toEntity(ReservationCancelRequestDto reservationRequest); - @Mapping(source = "campSite", target = "campSiteResponseDto") + @Mapping(source = "campSite.id", target = "campSiteResponseDto.siteId") @Mapping(source = "camp.campAddr", target = "campAddrResponseDto") - @Mapping(source = "camp", target = "campResponseDto") + @Mapping(source = "camp.id", target = "campResponseDto.campId") @Mapping(source = "review", target = "reviewDto", qualifiedByName = "reviewToDto") ReservationResponseDto toResponse(Reservation reservation); diff --git a/src/main/java/site/campingon/campingon/reservation/repository/ReservationRepository.java b/src/main/java/site/campingon/campingon/reservation/repository/ReservationRepository.java index 767204af..d6456e42 100644 --- a/src/main/java/site/campingon/campingon/reservation/repository/ReservationRepository.java +++ b/src/main/java/site/campingon/campingon/reservation/repository/ReservationRepository.java @@ -15,7 +15,12 @@ public interface ReservationRepository extends JpaRepository // 유저의 모든 예약 조회 @EntityGraph(attributePaths = {"review"}) - Page findByUserIdOrderByCreatedAtDesc(Long userId, Pageable pageable); + @Query("SELECT r FROM Reservation r WHERE r.user.id = :userId " + + "ORDER BY CASE " + + "WHEN r.status = 'RESERVED' THEN 0 " + + "WHEN r.status = 'COMPLETED' THEN 1 " + + "ELSE 2 END, r.checkinDate ASC") + Page findReservationsByUserId(Long userId, Pageable pageable); // 특정 예약의 상세 정보 조회 (연관된 캠프, 주소 정보 포함) @EntityGraph(attributePaths = {"camp", "campSite"}) diff --git a/src/main/java/site/campingon/campingon/reservation/service/ReservationServiceImpl.java b/src/main/java/site/campingon/campingon/reservation/service/ReservationServiceImpl.java index daf3d822..a38dc106 100644 --- a/src/main/java/site/campingon/campingon/reservation/service/ReservationServiceImpl.java +++ b/src/main/java/site/campingon/campingon/reservation/service/ReservationServiceImpl.java @@ -9,18 +9,12 @@ import site.campingon.campingon.camp.entity.CampSite; import site.campingon.campingon.camp.mapper.CampSiteMapper; import site.campingon.campingon.reservation.dto.*; -import site.campingon.campingon.reservation.entity.ReservationStatus; import site.campingon.campingon.reservation.repository.ReservationRepository; import site.campingon.campingon.reservation.mapper.ReservationMapper; import site.campingon.campingon.reservation.entity.Reservation; import site.campingon.campingon.reservation.utils.ReservationValidate; import site.campingon.campingon.user.entity.User; -import java.time.LocalDate; -import java.time.LocalTime; -import java.util.List; -import java.util.stream.Collectors; - @Service @RequiredArgsConstructor public class ReservationServiceImpl implements ReservationService { @@ -35,7 +29,7 @@ public Page getReservations(Long userId, Pageable pageab reservationValidate.validateUserById(userId); - Page reservations = reservationRepository.findByUserIdOrderByCreatedAtDesc(userId, pageable); + Page reservations = reservationRepository.findReservationsByUserId(userId, pageable); return reservations.map(reservationMapper::toResponse); } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a139d221..25e900e3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -5,6 +5,12 @@ spring: registration: google: redirect-uri: http://localhost:8080/login/oauth2/code/google + data: + redis: + host: localhost + port: 6379 + timeout: 2000 + password: app: front-url: http://localhost:3000 diff --git a/src/test/java/site/campingon/campingon/reservation/service/ReservationServiceTest.java b/src/test/java/site/campingon/campingon/reservation/service/ReservationServiceTest.java index 18f57be0..3d8a1acb 100644 --- a/src/test/java/site/campingon/campingon/reservation/service/ReservationServiceTest.java +++ b/src/test/java/site/campingon/campingon/reservation/service/ReservationServiceTest.java @@ -76,7 +76,6 @@ void setUp() { mockReservation = Reservation.builder() .id(1L) - .user(mockUser) .camp(mockCamp) .campSite(mockCampSite) .checkinDate(LocalDate.from(LocalDateTime.now())) @@ -87,23 +86,17 @@ void setUp() { .build(); mockCampAddrDto = CampAddrResponseDto.builder() - .city("TestCity") - .state("TestState") - .zipcode("TestZipcode") .streetAddr("Test Street") - .detailedAddr("Test detailedAddr") .build(); mockCampDto = CampResponseDto.builder() - .id(1L) - .name("Test Camp") + .campId(1L) + .campName("Test Camp") .thumbImage("Test Image") .build(); mockReservationDto = ReservationResponseDto.builder() .id(1L) - .userId(mockUser.getId()) - .campSiteId(mockCampSite.getId()) .guestCnt(mockReservation.getGuestCnt()) .status(mockReservation.getStatus()) .totalPrice(mockReservation.getTotalPrice()) @@ -123,7 +116,7 @@ void getReservationsSuccess() { List reservations = List.of(mockReservation); Page reservationPage = new PageImpl<>(reservations); - when(reservationRepository.findByUserIdOrderByCreatedAtDesc(userId, pageable)) + when(reservationRepository.findReservationsByUserId(userId, pageable)) .thenReturn(reservationPage); when(reservationMapper.toResponse(mockReservation)) .thenReturn(mockReservationDto); @@ -135,7 +128,7 @@ void getReservationsSuccess() { assertNotNull(result); assertTrue(result.hasContent()); assertEquals(mockReservationDto, result.getContent().get(0)); - verify(reservationRepository).findByUserIdOrderByCreatedAtDesc(userId, pageable); + verify(reservationRepository).findReservationsByUserId(userId, pageable); } @Test