22
33import com .knoc .global .exception .BusinessException ;
44import com .knoc .global .exception .ErrorCode ;
5+ import com .knoc .member .Member ;
6+ import com .knoc .member .MemberRepository ;
57import com .knoc .order .entity .Order ;
68import com .knoc .order .entity .OrderStatus ;
79import com .knoc .order .repository .OrderRepository ;
10+ import com .knoc .reviewFeedback .dto .MyReviewPageResponse ;
811import com .knoc .reviewFeedback .dto .ReviewPageDto ;
912import com .knoc .senior .entity .SeniorProfile ;
1013import com .knoc .senior .repository .SeniorProfileRepository ;
@@ -29,6 +32,7 @@ public class ReviewFeedbackService {
2932 private final ReviewFeedbackRepository reviewFeedbackRepository ;
3033 private final OrderRepository orderRepository ;
3134 private final SeniorProfileRepository seniorProfileRepository ;
35+ private final MemberRepository memberRepository ;
3236
3337 @ Transactional
3438 public void createReview (ReviewFeedbackRequestDto dto , Long juniorId ) {
@@ -66,6 +70,19 @@ public void createReview(ReviewFeedbackRequestDto dto, Long juniorId) {
6670
6771 }
6872
73+ @ Transactional
74+ public void updateReview (Long orderId , ReviewFeedbackRequestDto dto , Long juniorId ) {
75+ ReviewFeedback feedback = reviewFeedbackRepository .findByOrderId (orderId )
76+ .orElseThrow (() -> new BusinessException (ErrorCode .REVIEW_NOT_FOUND ));
77+
78+ if (!feedback .getJunior ().getId ().equals (juniorId )) {
79+ throw new BusinessException (ErrorCode .REVIEW_UPDATE_NOT_ALLOWED );
80+ }
81+
82+ // rating/comment validation은 DTO(@Min/@Max) + 컨트롤러 @Valid에서 처리된다는 전제
83+ feedback .update (dto .getRating (), dto .getComment ());
84+ }
85+
6986 public ReviewPageDto getReviewPage () {
7087 List <ReviewFeedback > feedbacks = reviewFeedbackRepository .findAllByOrderByCreatedAtDesc ();
7188
@@ -90,6 +107,7 @@ private List<ReviewPageDto.ReviewCardDto> mapToCards(List<ReviewFeedback> feedba
90107 .timeAgo (timeAgo (r .getCreatedAt ()))
91108 .rating (r .getRating ())
92109 .content (r .getComment ())
110+ .orderId (r .getOrder ().getId ())
93111 .build ()
94112 ).toList ();
95113 }
@@ -112,4 +130,12 @@ private String timeAgo(LocalDateTime createdAt) {
112130 return (days / 30 ) + "개월 전" ;
113131 }
114132
133+ public MyReviewPageResponse getMyReviewCards (String email ) {
134+ Long juniorId = memberRepository .findByEmail (email )
135+ .map (Member ::getId )
136+ .orElseThrow (() -> new BusinessException (ErrorCode .MEMBER_NOT_FOUND ));
137+
138+ List <ReviewFeedback > myFeedbacks = reviewFeedbackRepository .findByJunior_IdOrderByCreatedAtDesc (juniorId );
139+ return new MyReviewPageResponse (mapToCards (myFeedbacks ), myFeedbacks .size ());
140+ }
115141}
0 commit comments