diff --git a/src/main/java/site/campingon/campingon/camp/mapper/CampMapper.java b/src/main/java/site/campingon/campingon/camp/mapper/CampMapper.java index f6ca36f6..68bb4194 100644 --- a/src/main/java/site/campingon/campingon/camp/mapper/CampMapper.java +++ b/src/main/java/site/campingon/campingon/camp/mapper/CampMapper.java @@ -64,6 +64,7 @@ default List urlsToImagesList(List imageUrls) { @Mapping(target = "images", source = "images", qualifiedByName = "imagesToUrlList") @Mapping(target = "campAddr", source = "campAddr", qualifiedByName = "toCampAddrDto") @Mapping(target = "campInfo", source = "campInfo", qualifiedByName = "toCampInfoDto") + @Mapping(target = "animalAdmission", source = "animalAdmission") CampDetailResponseDto toCampDetailDto(Camp camp); @Named("toCampAddrDto") diff --git a/src/main/java/site/campingon/campingon/review/controller/ReviewController.java b/src/main/java/site/campingon/campingon/review/controller/ReviewController.java index 4822d60b..fca68dad 100644 --- a/src/main/java/site/campingon/campingon/review/controller/ReviewController.java +++ b/src/main/java/site/campingon/campingon/review/controller/ReviewController.java @@ -2,6 +2,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -10,7 +14,6 @@ import site.campingon.campingon.review.dto.ReviewUpdateRequestDto; import site.campingon.campingon.review.service.ReviewService; -import java.util.List; @Slf4j @RestController @@ -43,10 +46,11 @@ public ResponseEntity updateReview( // 캠핑장 id로 리뷰 목록 조회 @GetMapping("/{campId}/reviews") - public ResponseEntity> getReviewsByCampId( - @PathVariable("campId") Long campId + public ResponseEntity> getReviewsByCampId( + @PathVariable("campId") Long campId, + @PageableDefault(size = 4, sort = "id", direction = Sort.Direction.DESC) Pageable pageable ) { - List reviews = reviewService.getReviewsByCampId(campId); + Page reviews = reviewService.getReviewsByCampId(campId, pageable); return ResponseEntity.ok(reviews); } diff --git a/src/main/java/site/campingon/campingon/review/mapper/ReviewMapper.java b/src/main/java/site/campingon/campingon/review/mapper/ReviewMapper.java index 7ce3a293..929543a6 100644 --- a/src/main/java/site/campingon/campingon/review/mapper/ReviewMapper.java +++ b/src/main/java/site/campingon/campingon/review/mapper/ReviewMapper.java @@ -46,8 +46,16 @@ public interface ReviewMapper { @Mapping(target = "content", source = "requestDto.content", defaultValue = "review.content") Review updateFromRequest(Review review, ReviewUpdateRequestDto requestDto);*/ - List toResponseDtoList(List reviews); +// List toResponseDtoList(List reviews); @Mapping(target = "isRecommend", expression = "java(!review.isRecommend())") Review toUpdatedReview(Review review); + + @Mapping(target = "reviewId", source = "id") + @Mapping(target = "campId", source = "camp.id") + @Mapping(target = "reservationId", source = "reservation.id") + @Mapping(target = "userId", source = "user.id") + @Mapping(target = "recommended", source = "recommend") + @Mapping(target = "images", expression = "java(review.getReviewImages() != null ? review.getReviewImages().stream().map(image -> image.getImageUrl()).toList() : java.util.List.of())") + ReviewResponseDto toDto(Review review); } diff --git a/src/main/java/site/campingon/campingon/review/repository/ReviewRepository.java b/src/main/java/site/campingon/campingon/review/repository/ReviewRepository.java index 42166ec6..e55ba8dc 100644 --- a/src/main/java/site/campingon/campingon/review/repository/ReviewRepository.java +++ b/src/main/java/site/campingon/campingon/review/repository/ReviewRepository.java @@ -1,5 +1,7 @@ package site.campingon.campingon.review.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -15,7 +17,7 @@ public interface ReviewRepository extends JpaRepository { List findByCampSiteId(Long campSiteId); // 특정 캠핑장 하위 모든 리뷰 조회 - List findByCampId(Long campId); + Page findByCampId(Long campId, Pageable pageable); boolean existsByReservationId(Long reservationId); diff --git a/src/main/java/site/campingon/campingon/review/service/ReviewService.java b/src/main/java/site/campingon/campingon/review/service/ReviewService.java index 9585aec0..0701acc3 100644 --- a/src/main/java/site/campingon/campingon/review/service/ReviewService.java +++ b/src/main/java/site/campingon/campingon/review/service/ReviewService.java @@ -2,6 +2,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -187,12 +189,9 @@ private void moveReviewImagesToDeletedFolder(Review review) { }*/ // 캠핑장 id로 리뷰 목록 조회 - public List getReviewsByCampId(Long campId) { - Camp camp = campRepository.findById(campId) - .orElseThrow(() -> new GlobalException(CAMP_NOT_FOUND_BY_ID)); - - List reviews = reviewRepository.findByCampId(camp.getId()); - return reviewMapper.toResponseDtoList(reviews); + public Page getReviewsByCampId(Long campId, Pageable pageable) { + Page reviews = reviewRepository.findByCampId(campId, pageable); + return reviews.map(reviewMapper::toDto); } // 리뷰 상세 조회