@@ -342,4 +342,55 @@ public DefaultResponse<?> deleteReply(Long replyId, HttpServletRequest request)
342
342
343
343
return new DefaultResponse <>(StatusCode .SUCCESS , ResponseMessage .REPLY_DELETE_SUCCESS );
344
344
}
345
+
346
+ @ Transactional
347
+ public DefaultResponse <ReplyDto > changeReplyLike (Long replyId , HttpServletRequest request ) {
348
+ String token = tokenProvider .parseToken (request );
349
+ Long userId ;
350
+ if (tokenProvider .validateToken (token )) {
351
+ userId = tokenProvider .getUserId (token );
352
+ } else {
353
+ return new DefaultResponse <>(StatusCode .FAIL_AUTH , ResponseMessage .NOT_FOUND_USER );
354
+ }
355
+ Optional <User > userOptional = userRepository .findById (userId );
356
+ if (userOptional .isEmpty ()) {
357
+ return new DefaultResponse <>(StatusCode .NOT_EXIST , ResponseMessage .NOT_FOUND_USER );
358
+ }
359
+ User user = userOptional .get ();
360
+
361
+ Optional <Reply > replyOptional = replyRepository .findById (replyId );
362
+ if (replyOptional .isEmpty ()) {
363
+ return new DefaultResponse <>(StatusCode .NOT_EXIST , ResponseMessage .NOT_FOUND_REPLY );
364
+ }
365
+ Reply reply = replyOptional .get ();
366
+
367
+ // 추천 조회
368
+ Optional <ReplyLike > likeOptional = replyRepository .findLikeByUser (reply , user );
369
+
370
+ ReplyLike replyLike ;
371
+ // 추천 유무에 따라 실행
372
+ if (likeOptional .isPresent ()) {
373
+ replyLike = likeOptional .get ();
374
+ replyLikeRepository .delete (replyLike );
375
+ if (isNotSameUser (user , reply .getUser ())) {
376
+ // 좋아요 누른 사람 경험치 감소
377
+ user .changeExp (User .ExpChangeType .REPLY_CANCEL_LIKE );
378
+ // 답변 작성자 경험치 감소
379
+ reply .getUser ().changeExp (User .ExpChangeType .REPLY_NOT_BE_LIKED );
380
+ }
381
+ } else {
382
+ replyLike = reply .like (user , new ReplyLike ());
383
+ if (isNotSameUser (user , reply .getUser ())) {
384
+ // 좋아요 누른 사람 경험치 증가
385
+ user .changeExp (User .ExpChangeType .REPLY_LIKE );
386
+ // 답변 작성자 경험치 증가
387
+ reply .getUser ().changeExp (User .ExpChangeType .REPLY_BE_LIKED );
388
+ }
389
+ replyLikeRepository .save (replyLike );
390
+ }
391
+
392
+ ReplyDto replyDto = new ReplyDto (reply );
393
+
394
+ return new DefaultResponse <>(StatusCode .SUCCESS , ResponseMessage .REPLY_LIKE_CHANGE_SUCCESS , replyDto );
395
+ }
345
396
}
0 commit comments