diff --git a/api-module/src/main/java/com/likelion/apimodule/review/application/ReviewFindUseCase.java b/api-module/src/main/java/com/likelion/apimodule/review/application/ReviewFindUseCase.java index b721807..345017e 100644 --- a/api-module/src/main/java/com/likelion/apimodule/review/application/ReviewFindUseCase.java +++ b/api-module/src/main/java/com/likelion/apimodule/review/application/ReviewFindUseCase.java @@ -1,11 +1,14 @@ package com.likelion.apimodule.review.application; import com.likelion.apimodule.review.dto.ReviewInfo; +import com.likelion.apimodule.security.util.JwtUtil; import com.likelion.coremodule.menu.domain.Menu; +import com.likelion.coremodule.menu.service.MenuQueryService; import com.likelion.coremodule.review.domain.Review; import com.likelion.coremodule.review.service.ReviewQueryService; import com.likelion.coremodule.store.domain.Store; import com.likelion.coremodule.store.service.StoreQueryService; +import com.likelion.coremodule.user.application.UserQueryService; import com.likelion.coremodule.user.domain.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -13,6 +16,7 @@ import java.time.Duration; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; @Service @@ -21,15 +25,22 @@ public class ReviewFindUseCase { private final ReviewQueryService reviewQueryService; private final StoreQueryService storeQueryService; + private final UserQueryService userQueryService; + private final MenuQueryService menuQueryService; + private final JwtUtil jwtUtil; - public List findAllReviews() { + public List findAllReviews(String accessToken) { List allReviews = reviewQueryService.findAllReviews(); List reviewInfos = new ArrayList<>(); + String email = jwtUtil.getEmail(accessToken); + User myUser = userQueryService.findByEmail(email); + for (Review review : allReviews) { - User user = review.getUser(); - Menu menu = review.getMenu(); + + User user = userQueryService.findById(review.getUser().getUserId()); + Menu menu = menuQueryService.findMenuById(review.getMenu().getId()); String name = user.getName(); String picture = user.getPicture(); @@ -46,16 +57,21 @@ public List findAllReviews() { LocalDateTime now = LocalDateTime.now(); LocalDateTime reviewTime = review.getCreatedAt(); Integer hourDifference = (int) Duration.between(reviewTime, now).toHours(); - Integer dayDifference = (int) Duration.between(reviewTime, now).toDays(); - Integer weekDifference = (int) (dayDifference / 7); - + int dayDifference = (int) Duration.between(reviewTime, now).toDays(); + Integer weekDifference = dayDifference / 7; + boolean isMine = user.getUserId().equals(myUser.getUserId()); ReviewInfo reviewInfo = new ReviewInfo(id, name, picture, rating, content, image, - likeCount, storeName, menuName, hourDifference, dayDifference, weekDifference); + likeCount, storeName, menuName, hourDifference, dayDifference, weekDifference, isMine); reviewInfos.add(reviewInfo); } + reviewInfos.sort(Comparator.comparing(ReviewInfo::isMine) + .thenComparingInt(info -> Integer.parseInt(info.likeCount())) + .reversed()); + return reviewInfos; } + } diff --git a/api-module/src/main/java/com/likelion/apimodule/review/dto/ReviewInfo.java b/api-module/src/main/java/com/likelion/apimodule/review/dto/ReviewInfo.java index 7f56751..a591bae 100644 --- a/api-module/src/main/java/com/likelion/apimodule/review/dto/ReviewInfo.java +++ b/api-module/src/main/java/com/likelion/apimodule/review/dto/ReviewInfo.java @@ -11,5 +11,6 @@ public record ReviewInfo(Long reviewId, String menuName, Integer beforeHours, Integer beforeDay, - Integer beforeWeek) { + Integer beforeWeek, + Boolean isMine) { } diff --git a/api-module/src/main/java/com/likelion/apimodule/review/presentation/ReviewController.java b/api-module/src/main/java/com/likelion/apimodule/review/presentation/ReviewController.java index 801c385..ffd2867 100644 --- a/api-module/src/main/java/com/likelion/apimodule/review/presentation/ReviewController.java +++ b/api-module/src/main/java/com/likelion/apimodule/review/presentation/ReviewController.java @@ -39,9 +39,11 @@ public class ReviewController { } ) @Operation(summary = "전체 리뷰 확인 API", description = "전체 리뷰 확인 API 입니다.") - public ApplicationResponse> getReviewInfo() { + public ApplicationResponse> getReviewInfo( + @RequestHeader(AuthConsts.ACCESS_TOKEN_HEADER) String accessToken + ) { - List infos = reviewFindUseCase.findAllReviews(); + List infos = reviewFindUseCase.findAllReviews(accessToken); return ApplicationResponse.ok(infos); } diff --git a/core-module/src/main/java/com/likelion/coremodule/user/application/UserQueryService.java b/core-module/src/main/java/com/likelion/coremodule/user/application/UserQueryService.java index b295a32..98af943 100644 --- a/core-module/src/main/java/com/likelion/coremodule/user/application/UserQueryService.java +++ b/core-module/src/main/java/com/likelion/coremodule/user/application/UserQueryService.java @@ -14,7 +14,10 @@ public class UserQueryService { private final UserRepository userRepository; public User findByEmail(String email) { - return userRepository.findByEmail(email).orElseThrow(() -> new UserException(UserErrorCode.No_USER_INFO)); } + + public User findById(Long userId) { + return userRepository.findById(userId).orElseThrow(() -> new UserException(UserErrorCode.No_USER_INFO)); + } }