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..5a8535cf 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의 유지를 위해 지우지 마셔야 합니다. 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..320c8e70 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; 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 9de77832..f4318608 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; @@ -27,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; @@ -51,6 +40,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 +114,6 @@ public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequ request.getImageUrls().forEach(review::addReviewImage); reviewRepository.save(review); - menu.addReview(review); eventPublisher.publishEvent(LogEvent.of( @@ -427,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()) @@ -435,6 +437,18 @@ 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(); @@ -445,7 +459,6 @@ public SliceResponse findMyReviews(CustomUserDetails userD .build(); } - public ValidMenuForViewResponse validMenuForReview(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); 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..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,8 @@ 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; import ssu.eatssu.domain.review.entity.ReviewMenuLike; @@ -20,6 +22,7 @@ @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter +@Slf4j public class MyMealReviewResponse { @Schema(description = "리뷰 식별자", example = "123") Long reviewId; @@ -82,10 +85,25 @@ 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; + + if (ratings != null && ratings.getMainRating() != null) { + rating = ratings.getMainRating(); + } else if (review.getRating() != null) { + rating = review.getRating(); + } + return MyMealReviewResponse .builder() .reviewId(review.getId()) - .rating(review.getRating()) + .rating(rating) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imgUrlList)