Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE-126] 리뷰 상세 조회 API 리팩토링 및 분리 #127

Merged
merged 10 commits into from
Dec 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.betteriter.fo_domain.follow.repository;

import com.example.betteriter.fo_domain.follow.domain.Follow;
import com.example.betteriter.fo_domain.user.domain.Users;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
Expand All @@ -12,4 +13,6 @@ public interface FollowReadRepository extends JpaRepository<Follow, Long> {
List<Follow> findByFolloweeId(Long followeeId); // 팔로위(나를 팔로우하는 사람) 목록 조회

List<Follow> findByFollowerId(Long followerId); // 팔로워(내가 팔로우하는 사람) 목록 조회

boolean existsByFollowerAndFollowee(Users follower, Users followee);
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,6 @@ public void unfollowing(FollowRequest.UnfollowingDto unfollowingRequestDto) {

followWriteRepository.delete(follow);
}

private Follow findFollowData(Users user, Users targetUser) {
Follow follow = followReadRepository.findByFolloweeIdAndFollowerId(user.getId(), targetUser.getId());
if (follow == null) throw new FollowHandler(ErrorStatus._FOLLOW_NOT_FOUND);

return follow;
}

@Transactional(readOnly = true)
public List<Users> getFollowerList(Users user) {
List<Follow> followers = followReadRepository.findByFollowerId(user.getId());
Expand All @@ -69,4 +61,17 @@ public List<Users> getFolloweeList(Users user) {
.map(Follow::getFollower)
.collect(Collectors.toList());
}
/**
* - 팔로우 여부 체크 메소드
**/
public boolean isFollow(Users follower, Users followee) {
return this.followReadRepository.existsByFollowerAndFollowee(follower,followee);
}

private Follow findFollowData(Users user, Users targetUser) {
Follow follow = followReadRepository.findByFolloweeIdAndFollowerId(user.getId(), targetUser.getId());
if (follow == null) throw new FollowHandler(ErrorStatus._FOLLOW_NOT_FOUND);

return follow;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public ResponseDto<List<MypageResponse.MyReviewDto>> getReview(
}

/**
* 내가 리뷰 조회
* 내가 스크랩한 리뷰 조회
*
* @param id 사용자 id
* @return List<MypageResponse.MyReviewDto>
Expand All @@ -58,7 +58,7 @@ public ResponseDto<List<MypageResponse.MyReviewDto>> getScrapReview(
}

/**
* 내가 리뷰 조회
* 내가 좋아요 한 리뷰 조회
*
* @param id 사용자 id
* @return List<MypageResponse.MyReviewDto>
Expand All @@ -72,7 +72,7 @@ public ResponseDto<List<MypageResponse.MyReviewDto>> getLikeReview(
}

/**
* 팔로워 조회 (내가 팔로우한 사람)
* 팔로워 조회 (나를 팔로우 하는 사람)
*
* @param id 사용자 id
* @return List<MypageResponse.FollowerDto>
Expand All @@ -86,7 +86,7 @@ public ResponseDto<List<MypageResponse.FollowerDto>> getFollower(
}

/**
* 팔로잉 조회 (나를 팔로우한 사람)
* 팔로잉 조회 (내가 팔로잉 하는 사람)
*
* @param id 사용자 id
* @return List<MypageResponse.FollowerDto>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.example.betteriter.fo_domain.review.controller;

import com.example.betteriter.fo_domain.review.dto.CreateReviewRequestDto;
import com.example.betteriter.fo_domain.review.dto.GetReviewSpecResponseDto;
import com.example.betteriter.fo_domain.review.dto.ReviewDetailResponse;
import com.example.betteriter.fo_domain.review.dto.ReviewResponse;
import com.example.betteriter.fo_domain.review.dto.*;
import com.example.betteriter.fo_domain.review.exception.ReviewHandler;
import com.example.betteriter.fo_domain.review.service.ReviewService;
import com.example.betteriter.global.common.response.ResponseDto;
Expand All @@ -16,6 +13,7 @@
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

import static com.example.betteriter.global.common.code.status.ErrorStatus._METHOD_ARGUMENT_ERROR;

Expand Down Expand Up @@ -65,13 +63,29 @@ public ResponseDto<ReviewResponse> getReviewsBySearch(
}

/* 리뷰 상세 조회 */
@GetMapping("/detail/{reviewId}")
@GetMapping("{reviewId}/detail")
public ResponseDto<ReviewDetailResponse> getReviewDetail(
@PathVariable Long reviewId
) {
return ResponseDto.onSuccess(this.reviewService.getReviewDetail(reviewId));
}

/* 리뷰 상세 좋아요 정보 조회 */
@GetMapping("/{reviewId}/detail/likes")
public ResponseDto<List<ReviewLikeResponse>> getReviewDetailLikes(
@PathVariable Long reviewId
) {
return ResponseDto.onSuccess(this.reviewService.getReviewDetailLikes(reviewId));
}

/* 리뷰 상세 댓글 정보 조회 */
@GetMapping("/{reviewId}/detail/comments")
public ResponseDto<List<ReviewCommentResponse>> getReviewDetailComments(
@PathVariable Long reviewId
) {
return ResponseDto.onSuccess(this.reviewService.getReviewDetailComments(reviewId));
}

/* 리뷰 좋아요 */
@PostMapping("/like/{reviewId}")
public ResponseDto<Void> reviewLike(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,21 @@ public void countReviewLikedCount() {
this.likedCount += 1;
}

// TODO : 제거
public void setReviewImage(ReviewImage reviewImage) {
this.reviewImages.add(reviewImage);
}

// TODO : 제거
public void setReviewLikes(List<ReviewLike> reviewLikes) {
this.reviewLiked = reviewLikes;
}

// TODO : 제거
public void setReviewsComment(List<Comment> comments) {
this.reviewComment = comments;
}

// 매주 월요일 자정 실행
@Scheduled(cron = "0 0 0 ? * MON")
public void resetClickCountsScheduler() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.example.betteriter.fo_domain.review.dto;

import com.example.betteriter.fo_domain.review.domain.Review;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -13,7 +12,7 @@
@Getter
@NoArgsConstructor
public class GetReviewDetailResponseDto {
private Long id; // 리뷰 아이디
private Long reviewId; // 리뷰 아이디
private String productName; // 리뷰 상품명
private List<String> reviewSpecData; // 리뷰 스펙 데이터
private double starPoint; // 리뷰 별점
Expand All @@ -25,18 +24,24 @@ public class GetReviewDetailResponseDto {
private LocalDate boughtAt; // 구매 일
private LocalDate createdAt; // 작성일
private List<GetReviewImageResponseDto> reviewImages; // 리뷰 이미지

private long scrapedCount; // 리뷰 스크랩 갯수
private long likedCount; // 리뷰 좋아요 갯수
private long commentCount; // 리뷰 댓글 갯수
private boolean isScrap; // 리뷰 스크랩 여부
private boolean isLike; // 리뷰 좋아요 여부
private boolean isFollow; // 리뷰 팔로우 여부
private boolean isMine; // 로그인한 유저 리뷰 작성자 여부


@Builder
public GetReviewDetailResponseDto(Long id, String productName, List<String> reviewSpecData, double starPoint,
public GetReviewDetailResponseDto(Long reviewId, String productName, List<String> reviewSpecData, double starPoint,
String goodPoint, String badPoint, String shortReview, String manufacturer,
int storeName, LocalDate boughtAt, LocalDate createdAt, List<GetReviewImageResponseDto> reviewImages,
long scrapedCount, boolean isScrap, boolean isLike
long scrapedCount, long likedCount, long commentCount,
boolean isScrap, boolean isLike, boolean isFollow, boolean isMine
) {
this.id = id;
this.reviewId = reviewId;
this.productName = productName;
this.reviewSpecData = reviewSpecData;
this.starPoint = starPoint;
Expand All @@ -48,14 +53,19 @@ public GetReviewDetailResponseDto(Long id, String productName, List<String> revi
this.boughtAt = boughtAt;
this.createdAt = createdAt;
this.reviewImages = reviewImages;

this.scrapedCount = scrapedCount;
this.likedCount = likedCount;
this.commentCount = commentCount;
this.isScrap = isScrap;
this.isLike = isLike;
this.isFollow = isFollow;
this.isMine = isMine;
}

public static GetReviewDetailResponseDto from(Review review, boolean isLike, boolean isScrap) {
public static GetReviewDetailResponseDto from(Review review, boolean isLike, boolean isScrap, boolean isFollow, boolean isMine) {
return GetReviewDetailResponseDto.builder()
.id(review.getId())
.reviewId(review.getId())
.productName(review.getProductName())
.reviewSpecData(getReviewSpecDataToStr(review))
.starPoint(review.getStarPoint())
Expand All @@ -65,11 +75,15 @@ public static GetReviewDetailResponseDto from(Review review, boolean isLike, boo
.manufacturer(review.getManufacturer().getCoName())
.storeName(review.getStoreName())
.boughtAt(review.getBoughtAt())
.createdAt(review.getCreatedAt() == null ? null : review.getCreatedAt().toLocalDate())
.createdAt(review.getCreatedAt().toLocalDate())
.reviewImages(GetReviewImageResponseDto.of(review.getReviewImages()))
.scrapedCount(review.getScrapedCount())
.isLike(isLike)
.likedCount(review.getLikedCount())
.commentCount(review.getReviewComment().size())
.isScrap(isScrap)
.isLike(isLike)
.isFollow(isFollow)
.isMine(isMine)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.example.betteriter.fo_domain.review.dto;

import com.example.betteriter.fo_domain.comment.domain.Comment;
import com.example.betteriter.fo_domain.user.domain.Users;
import com.example.betteriter.global.constant.Job;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

/**
* - 리뷰 댓글 데이터 응답 DTO
**/
@Getter
@NoArgsConstructor
public class ReviewCommentResponse {
private Long id;
@JsonProperty("reviewCommentUserInfo")
private ReviewCommentUserInfoResponse reviewCommentUserInfoResponse;
private String comment;
private LocalDate createdAt;
private boolean isMine;

@Builder
public ReviewCommentResponse(Long id, ReviewCommentUserInfoResponse reviewCommentUserInfoResponse,
String comment, LocalDate createdAt, boolean isMine
) {
this.id = id;
this.reviewCommentUserInfoResponse = reviewCommentUserInfoResponse;
this.comment = comment;
this.createdAt = createdAt;
this.isMine = isMine;
}

public static ReviewCommentResponse from(Comment comment, boolean isMine) {
return ReviewCommentResponse.builder()
.id(comment.getId())
.reviewCommentUserInfoResponse(ReviewCommentUserInfoResponse.from(comment.getUsers()))
.comment(comment.getComment())
.createdAt(comment.getCreatedAt().toLocalDate())
.isMine(isMine)
.build();
}

@Getter
@NoArgsConstructor
public static class ReviewCommentUserInfoResponse {
private Long userId;
private String nickname;
private Job job;
private String profileImage;

@Builder
public ReviewCommentUserInfoResponse(Long userId, String nickname, Job job, String profileImage) {
this.userId = userId;
this.nickname = nickname;
this.job = job;
this.profileImage = profileImage;
}

public static ReviewCommentUserInfoResponse from(Users user) {
return ReviewCommentUserInfoResponse.builder()
.userId(user.getId())
.nickname(user.getUsersDetail().getNickName())
.job(user.getUsersDetail().getJob())
.profileImage(user.getUsersDetail().getProfileImage())
.build();
}
}
}
Loading
Loading