From 001e1bdddb980cc4832bd0df66c6766f5b9bf2ea Mon Sep 17 00:00:00 2001
From: Gouyeon Chung <gouyeonch@naver.com>
Date: Mon, 9 Sep 2024 16:55:43 +0900
Subject: [PATCH] =?UTF-8?q?FEAT=20:=20=EB=89=B4=EC=8A=A4=20=EA=B0=90?=
 =?UTF-8?q?=EC=A0=95=ED=91=9C=ED=98=84=20=EC=88=98=EC=A0=95=20=EA=B5=AC?=
 =?UTF-8?q?=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/NewsReactionController.java     |  8 ++++++++
 .../short_news/news/domain/NewsReaction.java   |  4 ++++
 .../repository/NewsReactionRepository.java     |  4 ++++
 .../news/service/NewsReactionService.java      | 18 ++++++++++++++++++
 4 files changed, 34 insertions(+)

diff --git a/src/main/java/com/kkokkomu/short_news/news/controller/NewsReactionController.java b/src/main/java/com/kkokkomu/short_news/news/controller/NewsReactionController.java
index 706490b..770743d 100644
--- a/src/main/java/com/kkokkomu/short_news/news/controller/NewsReactionController.java
+++ b/src/main/java/com/kkokkomu/short_news/news/controller/NewsReactionController.java
@@ -28,6 +28,14 @@ public ResponseDto<NewsReactionDto> addNewsReaction(@Parameter(hidden = true) @U
         return ResponseDto.ok(newsReactionService.createNewsReaction(userId, createNewsReactionDto));
     }
 
+    @Operation(summary = "뉴스 감정표현 수정")
+    @PutMapping("")
+    public ResponseDto<NewsReactionDto> updateNewsReaction(@Parameter(hidden = true) @UserId Long userId,
+                                                        @RequestBody CreateNewsReactionDto createNewsReactionDto) {
+        log.info("updateNewsReaction controller");
+        return ResponseDto.ok(newsReactionService.updateNewsReaction(userId, createNewsReactionDto));
+    }
+
     @Operation(summary = "뉴스 감정표현 삭제")
     @DeleteMapping("")
     public ResponseDto<String> removeNewsReaction(@Parameter(hidden = true) @UserId Long userId,
diff --git a/src/main/java/com/kkokkomu/short_news/news/domain/NewsReaction.java b/src/main/java/com/kkokkomu/short_news/news/domain/NewsReaction.java
index 2832ac9..fb29b78 100644
--- a/src/main/java/com/kkokkomu/short_news/news/domain/NewsReaction.java
+++ b/src/main/java/com/kkokkomu/short_news/news/domain/NewsReaction.java
@@ -37,4 +37,8 @@ public NewsReaction(User user, News news, ENewsReaction reaction) {
         this.news = news;
         this.reaction = reaction;
     }
+
+    public void updateReaction(ENewsReaction reaction) {
+        this.reaction = reaction;
+    }
 }
diff --git a/src/main/java/com/kkokkomu/short_news/news/repository/NewsReactionRepository.java b/src/main/java/com/kkokkomu/short_news/news/repository/NewsReactionRepository.java
index 6349245..67c20eb 100644
--- a/src/main/java/com/kkokkomu/short_news/news/repository/NewsReactionRepository.java
+++ b/src/main/java/com/kkokkomu/short_news/news/repository/NewsReactionRepository.java
@@ -13,5 +13,9 @@ public interface NewsReactionRepository extends JpaRepository<NewsReaction, Long
 
     Boolean existsByNewsIdAndUserId(Long newsId, Long userId);
 
+    Boolean existsByNewsIdAndUserIdAndReaction(Long newsId, Long userId, ENewsReaction reaction);
+
+    NewsReaction findByNewsAndUser(News news, User user);
+
     void deleteByNewsAndUserAndReaction(News news, User user, ENewsReaction reaction);
 }
diff --git a/src/main/java/com/kkokkomu/short_news/news/service/NewsReactionService.java b/src/main/java/com/kkokkomu/short_news/news/service/NewsReactionService.java
index 2b37f43..1092366 100644
--- a/src/main/java/com/kkokkomu/short_news/news/service/NewsReactionService.java
+++ b/src/main/java/com/kkokkomu/short_news/news/service/NewsReactionService.java
@@ -49,6 +49,24 @@ public NewsReactionDto createNewsReaction(Long userId, CreateNewsReactionDto cre
         return NewsReactionDto.of(newsReaction);
     } // 뉴스 감정표현 생성
 
+    public NewsReactionDto updateNewsReaction(Long userId, CreateNewsReactionDto createNewsReactionDto) {
+        log.info("updateNewsReaction service");
+
+        // 유저랑 뉴스 유효성 체크
+        User user = userLookupService.findUserById(userId);
+
+        News news = newsLookupService.findNewsById(createNewsReactionDto.newsId());
+
+        // 감정표현 객체 조회 및 업데이트
+        NewsReaction newsReaction = newsReactionRepository.findByNewsAndUser(news, user);
+
+        newsReaction.updateReaction(createNewsReactionDto.reaction());
+
+        NewsReaction save = newsReactionRepository.save(newsReaction);
+
+        return NewsReactionDto.of(save);
+    } // 뉴스 감정표현 수정
+
     @Transactional
     public String deleteNewsReaction(Long userId, Long newsId, String reaction) {
         User user = userLookupService.findUserById(userId);