From c88e926df79f6632e91b2b882e78d2bddffac0e3 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:12:54 +0900 Subject: [PATCH 1/9] =?UTF-8?q?fix:=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20rating=20null=EC=9D=B8=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#325)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 마이페이지 rating null인 문제 수정 * refactor: gemini 리뷰 반영 --- .../java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index c10579af..d38b3ebe 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -85,7 +85,7 @@ public static MyMealReviewResponse from(Review review) { return MyMealReviewResponse .builder() .reviewId(review.getId()) - .rating(review.getRating()) + .rating(review.getRating() != null ? review.getRating() : (review.getRatings() != null ? review.getRatings().getMainRating() : null)) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imgUrlList) From 7e7727f89d78337c094158e8200acfcf71a357db Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:43:43 +0900 Subject: [PATCH 2/9] =?UTF-8?q?hotfix:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20rating=20null=EC=9D=B8=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#326)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 마이페이지 rating null인 문제 수정 * refactor: gemini 리뷰 반영 * fix: rating null나오는 문제 수정 --- .../eatssu/domain/user/dto/MyMealReviewResponse.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index d38b3ebe..94196e26 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.dto.MenuIdNameLikeDto; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; @@ -82,10 +83,17 @@ public static MyMealReviewResponse from(Review review) { ); } + Ratings ratings = review.getRatings(); + int rating = 0; + + if (ratings != null) { + rating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + } + return MyMealReviewResponse .builder() .reviewId(review.getId()) - .rating(review.getRating() != null ? review.getRating() : (review.getRatings() != null ? review.getRatings().getMainRating() : null)) + .rating(rating) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imgUrlList) From 94be4766c3d90aea8320b23e098400b9871d4eb3 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Dec 2025 12:19:32 +0900 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20rating=20Primitive=ED=98=95=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#327)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 마이페이지 rating null인 문제 수정 * refactor: gemini 리뷰 반영 * fix: rating null나오는 문제 수정 * refactor: primitive형 rating 수정 --- .../eatssu/domain/review/entity/Review.java | 15 +++++++---- .../review/service/ReviewServiceV2.java | 26 +++++++++---------- .../domain/user/dto/MyMealReviewResponse.java | 4 +-- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 4e6b2ef7..9c6a0299 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import jakarta.persistence.AttributeOverride; import jakarta.persistence.AttributeOverrides; import jakarta.persistence.CascadeType; @@ -30,6 +25,11 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /* * 251001 이정민 * 해당 엔티티의 rating은 reviewV1, reviewV2 api의 유지를 위해 지우지 마셔야 합니다. @@ -49,6 +49,11 @@ public class Review extends BaseTimeEntity { private String content; @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "mainRating", column = @Column(name = "main_rating")), + @AttributeOverride(name = "amountRating", column = @Column(name = "amount_rating")), + @AttributeOverride(name = "tasteRating", column = @Column(name = "taste_rating")) + }) private Ratings ratings; // v2용 rating diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 9de77832..97f1049d 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,17 +1,5 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; @@ -51,6 +39,19 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.log.event.LogEvent; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @Slf4j @Service @RequiredArgsConstructor @@ -112,7 +113,6 @@ public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequ request.getImageUrls().forEach(review::addReviewImage); reviewRepository.save(review); - menu.addReview(review); eventPublisher.publishEvent(LogEvent.of( diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 94196e26..a70cf654 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,10 +84,10 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - int rating = 0; + Integer rating = review.getRating(); if (ratings != null) { - rating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + rating = ratings.getMainRating() != null ? ratings.getMainRating() : rating; } return MyMealReviewResponse From fb3b53e71f38735eb5d2c7bd0b993f4c92b368b8 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 12:29:45 +0900 Subject: [PATCH 4/9] =?UTF-8?q?hotfix:=20rating=EC=9D=B4=20null=EC=9D=B8?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index a70cf654..be7fb078 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -86,8 +86,8 @@ public static MyMealReviewResponse from(Review review) { Ratings ratings = review.getRatings(); Integer rating = review.getRating(); - if (ratings != null) { - rating = ratings.getMainRating() != null ? ratings.getMainRating() : rating; + if (rating == null) { + rating = ratings.getMainRating(); } return MyMealReviewResponse From e2f32fa8eb9c5b8377cdc77517d7d54e436cae30 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 12:45:44 +0900 Subject: [PATCH 5/9] =?UTF-8?q?hotfix:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20rating=20null=EB=82=98=EC=98=A4=EB=8A=94?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/review/entity/Review.java | 5 ----- .../ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 6 ++++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 9c6a0299..5a8535cf 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -49,11 +49,6 @@ public class Review extends BaseTimeEntity { private String content; @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "mainRating", column = @Column(name = "main_rating")), - @AttributeOverride(name = "amountRating", column = @Column(name = "amount_rating")), - @AttributeOverride(name = "tasteRating", column = @Column(name = "taste_rating")) - }) private Ratings ratings; // v2용 rating diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index be7fb078..99baae25 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,10 +84,12 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - Integer rating = review.getRating(); + Integer rating = 0; - if (rating == null) { + if (ratings != null) { rating = ratings.getMainRating(); + }else{ + rating = review.getRating(); } return MyMealReviewResponse From ef26c9ae320da0c1d71dd1fbd6717795b678a4d3 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 13:06:41 +0900 Subject: [PATCH 6/9] =?UTF-8?q?hotfix:=20findMyReviews=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EC=97=90=20Transactional=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/review/service/ReviewServiceV2.java | 1 + .../java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 97f1049d..97426794 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -427,6 +427,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { /** * 내 리뷰 리스트 조회 */ + @Transactional(readOnly = true) public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, Pageable pageable) { User user = userRepository.findById(userDetails.getId()) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 99baae25..e82275d0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,7 +84,7 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - Integer rating = 0; + Integer rating; if (ratings != null) { rating = ratings.getMainRating(); From 3844769fb4faf4b20ff8ce1eda7ba3b6f0d061c0 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 13:28:44 +0900 Subject: [PATCH 7/9] =?UTF-8?q?hotfix:=20queryDSL=20->=20JPA=EB=A1=9C=20?= =?UTF-8?q?=EC=98=81=EC=86=8D=EC=84=B1=20=EC=BB=A8=ED=85=8D=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ReviewControllerV2.java | 7 ++-- .../review/repository/ReviewRepository.java | 35 ++++++++++++----- .../review/service/ReviewServiceV2.java | 39 +++++++++++++++++++ .../domain/user/dto/MyMealReviewResponse.java | 6 +-- 4 files changed, 70 insertions(+), 17 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index dc25bda0..4904d764 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -28,7 +28,6 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; -import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; @@ -223,9 +222,9 @@ public BaseResponse> getMyReviews( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, - lastReviewId, - pageable); + SliceResponse myReviews = reviewServiceV2.findMyReviewsV2(customUserDetails, + lastReviewId, + pageable); return BaseResponse.success(myReviews); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index e4c87a4c..0f08ab08 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.review.repository; -import java.util.Collection; -import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,6 +8,10 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +import java.util.Collection; +import java.util.List; public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { @@ -39,13 +41,26 @@ OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) List findAllMealAndMenuReviews(@Param("mealId") Long mealId); @Query(""" - SELECT r FROM Review r - WHERE (r.meal.id = :mealId - OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) - AND (:lastReviewId IS NULL OR r.id < :lastReviewId) - ORDER BY r.id DESC - """) + SELECT r FROM Review r + WHERE (r.meal.id = :mealId + OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) + AND (:lastReviewId IS NULL OR r.id < :lastReviewId) + ORDER BY r.id DESC + """) Page findMealAndMenuReviews(@Param("mealId") Long mealId, - @Param("lastReviewId") Long lastReviewId, - Pageable pageable); + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); + + @Query(""" + select r + from Review r + where r.user = :user + and (:lastReviewId is null or r.id < :lastReviewId) + order by r.id desc + """) + List findMyReviews( + @Param("user") User user, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable + ); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 97426794..14f4b3ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -4,8 +4,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -446,6 +448,43 @@ public SliceResponse findMyReviews(CustomUserDetails userD .build(); } + @Transactional(readOnly = true) + public SliceResponse findMyReviewsV2( + CustomUserDetails userDetails, + Long lastReviewId, + Pageable pageable + ) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + // pageSize + 1 로 조회 + Pageable slicePageable = + PageRequest.of( + pageable.getPageNumber(), + pageable.getPageSize() + 1, + Sort.by(Sort.Direction.DESC, "id") + ); + + List reviews = + reviewRepository.findMyReviews(user, lastReviewId, slicePageable); + + boolean hasNext = reviews.size() > pageable.getPageSize(); + if (hasNext) { + reviews.remove(pageable.getPageSize()); + } + + List responses = + reviews.stream() + .map(MyMealReviewResponse::from) + .toList(); + + return SliceResponse.builder() + .numberOfElements(responses.size()) + .hasNext(hasNext) + .dataList(responses) + .build(); + } + public ValidMenuForViewResponse validMenuForReview(Long mealId) { Meal meal = mealRepository.findById(mealId) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index e82275d0..1544da42 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,11 +84,11 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - Integer rating; + Integer rating = null; - if (ratings != null) { + if (ratings != null && ratings.getMainRating() != null) { rating = ratings.getMainRating(); - }else{ + } else if (review.getRating() != null) { rating = review.getRating(); } From a7b34245fd6a723a8b1c3f5bbdb84efdd62252c7 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 13:44:09 +0900 Subject: [PATCH 8/9] =?UTF-8?q?hotfix:=20log=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ReviewControllerV2.java | 6 +-- .../review/service/ReviewServiceV2.java | 53 +++++-------------- 2 files changed, 15 insertions(+), 44 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 4904d764..320c8e70 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -222,9 +222,9 @@ public BaseResponse> getMyReviews( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = reviewServiceV2.findMyReviewsV2(customUserDetails, - lastReviewId, - pageable); + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); return BaseResponse.success(myReviews); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 14f4b3ad..7028711c 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -4,10 +4,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -17,6 +15,7 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.menu.service.MealRatingService; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; @@ -429,7 +428,6 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { /** * 내 리뷰 리스트 조회 */ - @Transactional(readOnly = true) public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, Pageable pageable) { User user = userRepository.findById(userDetails.getId()) @@ -438,6 +436,17 @@ public SliceResponse findMyReviews(CustomUserDetails userD Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); + sliceReviews.forEach(item -> { + Ratings r = item.getRatings(); + log.info( + "reviewId=" + item.getId() + + ", ratingCol=" + item.getRating() + + ", ratingsObj=" + (r == null ? "null" : "not-null") + + ", main=" + (r == null ? null : r.getMainRating()) + + ", amount=" + (r == null ? null : r.getAmountRating()) + ); + }); + List myMealReviewResponses = sliceReviews.getContent().stream() .map(MyMealReviewResponse::from).toList(); @@ -448,44 +457,6 @@ public SliceResponse findMyReviews(CustomUserDetails userD .build(); } - @Transactional(readOnly = true) - public SliceResponse findMyReviewsV2( - CustomUserDetails userDetails, - Long lastReviewId, - Pageable pageable - ) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - // pageSize + 1 로 조회 - Pageable slicePageable = - PageRequest.of( - pageable.getPageNumber(), - pageable.getPageSize() + 1, - Sort.by(Sort.Direction.DESC, "id") - ); - - List reviews = - reviewRepository.findMyReviews(user, lastReviewId, slicePageable); - - boolean hasNext = reviews.size() > pageable.getPageSize(); - if (hasNext) { - reviews.remove(pageable.getPageSize()); - } - - List responses = - reviews.stream() - .map(MyMealReviewResponse::from) - .toList(); - - return SliceResponse.builder() - .numberOfElements(responses.size()) - .hasNext(hasNext) - .dataList(responses) - .build(); - } - - public ValidMenuForViewResponse validMenuForReview(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); From 0bccc08774b0422424b051c32a7cea04bbf3b51c Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 14:11:03 +0900 Subject: [PATCH 9/9] =?UTF-8?q?hotfix:=20legacy=20rating=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/service/ReviewServiceV2.java | 2 ++ .../ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 7028711c..f4318608 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -428,6 +428,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { /** * 내 리뷰 리스트 조회 */ + @Transactional(readOnly = true) public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, Pageable pageable) { User user = userRepository.findById(userDetails.getId()) @@ -436,6 +437,7 @@ public SliceResponse findMyReviews(CustomUserDetails userD Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); + sliceReviews.forEach(item -> { Ratings r = item.getRatings(); log.info( diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 1544da42..c3e2d904 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.dto.MenuIdNameLikeDto; import ssu.eatssu.domain.review.entity.Review; @@ -21,6 +22,7 @@ @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter +@Slf4j public class MyMealReviewResponse { @Schema(description = "리뷰 식별자", example = "123") Long reviewId; @@ -83,6 +85,12 @@ public static MyMealReviewResponse from(Review review) { ); } + log.info("ratings = {}", review.getRatings()); + if (review.getRatings() != null) { + log.info("mainRating = {}", review.getRatings().getMainRating()); + } + log.info("legacy rating = {}", review.getRating()); + Ratings ratings = review.getRatings(); Integer rating = null;