From 5c1d0c6f6fd7274660cfc7e854f4d11c70c48dc2 Mon Sep 17 00:00:00 2001 From: "y.tnwjd" Date: Thu, 13 Mar 2025 21:29:56 +0900 Subject: [PATCH 1/3] fix: post like toggle --- .../user/QnaPostUserController.java | 20 ++++++++++++++----- .../com/ajouchong/service/QnaPostService.java | 16 +++++++++++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ajouchong/controller/user/QnaPostUserController.java b/src/main/java/com/ajouchong/controller/user/QnaPostUserController.java index c2484a2..0e1a433 100644 --- a/src/main/java/com/ajouchong/controller/user/QnaPostUserController.java +++ b/src/main/java/com/ajouchong/controller/user/QnaPostUserController.java @@ -11,7 +11,9 @@ import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j @RestController @@ -56,8 +58,9 @@ public ApiResponse getPostById(@PathVariable Long postId, } @PostMapping("/{postId}/like") - public ApiResponse incrementLikeCount(@PathVariable Long postId, - @CookieValue(value = "accessToken", required = false) String token) { + public ApiResponse> incrementLikeCount( + @PathVariable Long postId, + @CookieValue(value = "accessToken", required = false) String token) { if (token == null) { return new ApiResponse<>(0, "로그인이 필요합니다.", null); @@ -68,10 +71,17 @@ public ApiResponse incrementLikeCount(@PathVariable Long postId, return new ApiResponse<>(0, "유효하지 않은 JWT 토큰입니다.", null); } - boolean isLike = qnaPostService.toggleLike(postId, token); - String message = isLike ? "번 게시글 좋아요 성공" : "번 게시글 좋아요 취소 성공"; + Map result = qnaPostService.toggleLike(postId, token); + boolean isLiked = (boolean) result.get("isLiked"); + long likeCount = (long) result.get("likeCount"); - return new ApiResponse<>(1, postId + message, isLike); + String message = isLiked ? "번 게시글 좋아요 성공" : "번 게시글 좋아요 취소 성공"; + + Map responseData = new HashMap<>(); + responseData.put("isLiked", isLiked); + responseData.put("likeCount", likeCount); + + return new ApiResponse<>(1, postId + message, responseData); } private String extractTokenFromHeader(HttpServletRequest request) { diff --git a/src/main/java/com/ajouchong/service/QnaPostService.java b/src/main/java/com/ajouchong/service/QnaPostService.java index c4a4af9..b99980b 100644 --- a/src/main/java/com/ajouchong/service/QnaPostService.java +++ b/src/main/java/com/ajouchong/service/QnaPostService.java @@ -17,7 +17,9 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -80,22 +82,23 @@ public List getAllPosts() { } @Transactional - public boolean toggleLike(Long postId, String token) { + public Map toggleLike(Long postId, String token) { String email = jwtTokenProvider.getEmailFromToken(token); Member member = memberRepository.findByEmail(email) .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); Optional existingLike = qnaLikeRepository.findByMemberAndQnaPostId(member, postId); - boolean isLike = false; + boolean isLiked; if (existingLike.isPresent()) { qnaLikeRepository.delete(existingLike.get()); + isLiked = false; // 좋아요 취소됨 } else { QnaLike qnaLike = new QnaLike(); qnaLike.setMember(member); qnaLike.setQnaPostId(postId); qnaLikeRepository.save(qnaLike); - isLike = true; + isLiked = true; // 좋아요 추가됨 } // 좋아요 개수 업데이트 @@ -105,9 +108,14 @@ public boolean toggleLike(Long postId, String token) { qnaPost.setQpUserLikeCnt((int) likeCount); qnaPostRepository.save(qnaPost); - return isLike; + // 결과 반환 + Map result = new HashMap<>(); + result.put("isLiked", isLiked); + result.put("likeCount", likeCount); + return result; } + @Transactional public boolean isUserLikedPost(Long postId, String userEmail) { Member member = memberRepository.findByEmail(userEmail) From 81b327ec5eb1ac979439918a8c5945cab0e4672e Mon Sep 17 00:00:00 2001 From: "y.tnwjd" Date: Fri, 14 Mar 2025 17:10:54 +0900 Subject: [PATCH 2/3] fix: agora like toggle" " --- .../controller/user/AgoraUserController.java | 17 +++++++++++++---- .../com/ajouchong/service/AgoraService.java | 14 ++++++++++---- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ajouchong/controller/user/AgoraUserController.java b/src/main/java/com/ajouchong/controller/user/AgoraUserController.java index 455379d..322cb7c 100644 --- a/src/main/java/com/ajouchong/controller/user/AgoraUserController.java +++ b/src/main/java/com/ajouchong/controller/user/AgoraUserController.java @@ -8,7 +8,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j @RestController @@ -54,7 +56,7 @@ public ApiResponse getPostById(@PathVariable Long postId, } @PostMapping("/{postId}/like") - public ApiResponse incrementLikeCount(@PathVariable Long postId, + public ApiResponse> incrementLikeCount(@PathVariable Long postId, @CookieValue(value = "accessToken", required = false) String token) { if (token == null) { return new ApiResponse<>(0, "로그인이 필요합니다.", null); @@ -65,9 +67,16 @@ public ApiResponse incrementLikeCount(@PathVariable Long postId, return new ApiResponse<>(0, "유효하지 않은 JWT 토큰입니다.", null); } - boolean isLike = agoraService.toggleAgoraLike(postId, token); - String message = isLike ? "번 게시글 좋아요 성공" : "번 게시글 좋아요 취소 성공"; + Map result = agoraService.toggleAgoraLike(postId, token); + boolean isLiked = (boolean) result.get("isLiked"); + long likeCount = (long) result.get("likeCount"); - return new ApiResponse<>(1, postId + message, isLike); + String message = isLiked ? "번 게시글 좋아요 성공" : "번 게시글 좋아요 취소 성공"; + + Map responseData = new HashMap<>(); + responseData.put("isLiked", isLiked); + responseData.put("likeCount", likeCount); + + return new ApiResponse<>(1, postId + message, responseData); } } diff --git a/src/main/java/com/ajouchong/service/AgoraService.java b/src/main/java/com/ajouchong/service/AgoraService.java index 95d22c7..81289f2 100644 --- a/src/main/java/com/ajouchong/service/AgoraService.java +++ b/src/main/java/com/ajouchong/service/AgoraService.java @@ -14,7 +14,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -120,22 +122,23 @@ public void approvePost(Long postId, String token) { @Transactional - public boolean toggleAgoraLike(Long postId, String token) { + public Map toggleAgoraLike(Long postId, String token) { String email = jwtTokenProvider.getEmailFromToken(token); Member member = memberRepository.findByEmail(email) .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); Optional exLike = agoraLikeRepository.findByMemberAndAgoraId(member, postId); - boolean isLike = false; + boolean isLiked; if (exLike.isPresent()) { agoraLikeRepository.delete(exLike.get()); + isLiked = false; } else { AgoraLike agoraLike = new AgoraLike(); agoraLike.setMember(member); agoraLike.setAgoraId(postId); agoraLikeRepository.save(agoraLike); - isLike = true; + isLiked = true; } // 좋아요 개수 업데이트 @@ -145,7 +148,10 @@ public boolean toggleAgoraLike(Long postId, String token) { agora.setApUserLikeCount((int) likeCount); agoraRepository.save(agora); - return isLike; + Map result = new HashMap<>(); + result.put("isLiked", isLiked); + result.put("likeCount", likeCount); + return result; } public AgoraResponseDto convertToAgoraResponseDto(Agora agora) { From a50baa59103f7f5f825cbf9a3e27bc02dad289c5 Mon Sep 17 00:00:00 2001 From: "y.tnwjd" Date: Fri, 14 Mar 2025 17:14:18 +0900 Subject: [PATCH 3/3] fix: del readOnly --- src/main/java/com/ajouchong/service/AgoraService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/ajouchong/service/AgoraService.java b/src/main/java/com/ajouchong/service/AgoraService.java index 81289f2..659c238 100644 --- a/src/main/java/com/ajouchong/service/AgoraService.java +++ b/src/main/java/com/ajouchong/service/AgoraService.java @@ -51,7 +51,7 @@ public AgoraResponseDto createAgoraPost(AgoraRequestDto requestDto, String autho return convertToAgoraResponseDto(savedPost); } - @Transactional(readOnly = true) + @Transactional public AgoraResponseDto getAgoraById(Long postId, String token) { Agora agora = agoraRepository.findById(postId) .orElseThrow(() -> new IllegalArgumentException(postId + "번 게시글을 찾을 수 없습니다."));