Skip to content
10 changes: 5 additions & 5 deletions src/main/java/ssu/eatssu/domain/review/entity/Review.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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의 유지를 위해 지우지 마셔야 합니다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<Review, Long>, ReviewRepositoryCustom {

Expand Down Expand Up @@ -39,13 +41,26 @@ OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId))
List<Review> 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<Review> 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<Review> findMyReviews(
@Param("user") User user,
@Param("lastReviewId") Long lastReviewId,
Pageable pageable
);
Comment on lines +54 to +65

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

새로 추가된 findMyReviews 메소드가 코드 내에서 사용되지 않고 있습니다. 불필요한 코드는 혼란을 야기하고 유지보수성을 떨어뜨릴 수 있으므로, 사용되지 않는다면 제거하는 것이 좋습니다.

}
41 changes: 27 additions & 14 deletions src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -427,6 +428,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) {
/**
* 내 리뷰 리스트 조회
*/
@Transactional(readOnly = true)
public SliceResponse<MyMealReviewResponse> findMyReviews(CustomUserDetails userDetails, Long lastReviewId,
Pageable pageable) {
User user = userRepository.findById(userDetails.getId())
Expand All @@ -435,6 +437,18 @@ public SliceResponse<MyMealReviewResponse> findMyReviews(CustomUserDetails userD
Slice<Review> 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())
);
});
Comment on lines +441 to +450

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

findMyReviews 메소드에 추가된 로깅 코드는 디버깅 목적으로 보입니다. 프로덕션 코드에 포함될 경우 불필요한 로그가 대량으로 생성되어 성능에 영향을 줄 수 있고 로그 파일을 어지럽힐 수 있습니다. 병합 전에 이 코드를 제거하는 것을 권장합니다.


List<MyMealReviewResponse> myMealReviewResponses = sliceReviews.getContent().stream()
.map(MyMealReviewResponse::from).toList();

Expand All @@ -445,7 +459,6 @@ public SliceResponse<MyMealReviewResponse> findMyReviews(CustomUserDetails userD
.build();
}


public ValidMenuForViewResponse validMenuForReview(Long mealId) {
Meal meal = mealRepository.findById(mealId)
.orElseThrow(() -> new BaseException(NOT_FOUND_MEAL));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -20,6 +22,7 @@
@Builder
@Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용")
@Getter
@Slf4j
public class MyMealReviewResponse {
@Schema(description = "리뷰 식별자", example = "123")
Long reviewId;
Expand Down Expand Up @@ -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());
Comment on lines +88 to +92

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

from 메소드에 추가된 log.info 호출은 디버깅용 코드로 보입니다. 이러한 로그는 프로덕션 환경에서 불필요하며, 민감한 정보를 노출할 위험도 있습니다. 병합 전에 제거하는 것이 좋습니다.


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)
Expand Down