44import com .knoc .chat .entity .MessageType ;
55import com .knoc .global .exception .BusinessException ;
66import com .knoc .global .exception .ErrorCode ;
7+ import com .knoc .member .Member ;
8+ import com .knoc .member .MemberRepository ;
79import com .knoc .order .entity .Order ;
810import com .knoc .order .entity .OrderStatus ;
911import com .knoc .order .repository .OrderRepository ;
1012import com .knoc .review .dto .ReviewRequestCreateRequest ;
1113import com .knoc .review .dto .ReviewRequestCreateResponse ;
14+ import com .knoc .review .dto .ReviewRequestUpdateRequest ;
1215import com .knoc .review .entity .ReviewRequest ;
16+ import com .knoc .review .repository .ReviewReportRepository ;
1317import com .knoc .review .repository .ReviewRequestRepository ;
1418import lombok .RequiredArgsConstructor ;
1519import org .springframework .context .ApplicationEventPublisher ;
@@ -24,21 +28,11 @@ public class ReviewRequestService {
2428 private final OrderRepository orderRepository ;
2529 private final ReviewRequestRepository reviewRequestRepository ;
2630 private final ApplicationEventPublisher eventPublisher ;
31+ private final MemberRepository memberRepository ;
32+ private final ReviewReportRepository reviewReportRepository ;
2733
28- public ReviewRequestCreateResponse createReviewRequest (ReviewRequestCreateRequest dto , Long juniorId ) {
29- // 해당 주문 가져오기
30- Order order = orderRepository .findById (dto .getOrderId ())
31- .orElseThrow (() -> new BusinessException (ErrorCode .ORDER_NOT_FOUND ));
32-
33- // 주니어 소유 검증
34- if (!order .getJunior ().getId ().equals (juniorId )) {
35- throw new BusinessException (ErrorCode .NOT_JUNIOR_FOR_ORDER );
36- }
37-
38- // 상태 검증
39- if (order .getStatus () != OrderStatus .PAID ) {
40- throw new BusinessException (ErrorCode .REVIEW_REQUEST_NOT_ALLOWED );
41- }
34+ public ReviewRequestCreateResponse createReviewRequest (ReviewRequestCreateRequest dto , String email ) {
35+ Order order = juniorAndOrderValidation (email , dto .getOrderId ());
4236
4337 // 중복 검증
4438 if (reviewRequestRepository .existsByOrderId (order .getId ())) {
@@ -71,4 +65,38 @@ public ReviewRequestCreateResponse createReviewRequest(ReviewRequestCreateReques
7165 // 6. 저장된 주문을 클라이언트에게 보여줄 전용 응답 객체(DTO)로 변환
7266 return ReviewRequestCreateResponse .from (reviewRequest );
7367 }
68+
69+ @ Transactional
70+ public Long updateReviewRequest (String email , ReviewRequestUpdateRequest req ) {
71+ Order order = juniorAndOrderValidation (email , req .orderId ());
72+ if (reviewReportRepository .existsByReviewRequest_Order_Id (order .getId ())) {
73+ throw new BusinessException (ErrorCode .REVIEW_REPORT_ALREADY_EXISTS );
74+ }
75+ ReviewRequest rr = reviewRequestRepository .findByOrder (order )
76+ .orElseThrow (() -> new BusinessException (ErrorCode .REVIEW_REQUEST_NOT_FOUND ));
77+ rr .update (req .githubPrUrl (), req .projectContext (), req .concernPoint ());
78+ return order .getId ();
79+ }
80+
81+ private Order juniorAndOrderValidation (String email , Long orderId ) {
82+ // juniorId 가져오기
83+ Long juniorId = memberRepository .findByEmail (email )
84+ .map (Member ::getId )
85+ .orElseThrow (() -> new BusinessException (ErrorCode .MEMBER_NOT_FOUND ));
86+
87+ // 해당 주문 가져오기
88+ Order order = orderRepository .findById (orderId )
89+ .orElseThrow (() -> new BusinessException (ErrorCode .ORDER_NOT_FOUND ));
90+
91+ // 주니어 소유 검증
92+ if (!order .getJunior ().getId ().equals (juniorId )) {
93+ throw new BusinessException (ErrorCode .NOT_JUNIOR_FOR_ORDER );
94+ }
95+
96+ // 상태 검증
97+ if (order .getStatus () != OrderStatus .PAID ) {
98+ throw new BusinessException (ErrorCode .REVIEW_REQUEST_NOT_ALLOWED );
99+ }
100+ return order ;
101+ }
74102}
0 commit comments