From cf73aa059f6cff41ab6c73660517b96d676ca633 Mon Sep 17 00:00:00 2001
From: kkj6235 <kkj6235@ajou.ac.kr>
Date: Fri, 24 Nov 2023 12:57:43 +0900
Subject: [PATCH] feat: Add 'isHeart' field to PostResDto, update related
 functionality

---
 build.gradle                                  |  2 +-
 .../post/config/security/SecurityUtil.java    |  1 -
 .../post/controller/PostController.java       |  5 ++-
 .../umc/spring/post/data/dto/PostDto.java     |  1 -
 .../umc/spring/post/data/dto/PostResDto.java  | 38 ++++++++++++++++++-
 .../umc/spring/post/service/PostService.java  |  2 +-
 .../spring/post/service/PostServiceImpl.java  |  6 +--
 7 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/build.gradle b/build.gradle
index 0cd61ec..17ec5eb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -27,7 +27,7 @@ dependencies {
 	implementation 'org.springframework.boot:spring-boot-starter-security'
 	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
 	implementation 'org.springframework.boot:spring-boot-starter-web'
-
+	implementation 'com.google.code.gson:gson:2.8.9'
 	// swagger
 	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
 	implementation 'org.hibernate.validator:hibernate-validator:7.0.1.Final'
diff --git a/src/main/java/umc/spring/post/config/security/SecurityUtil.java b/src/main/java/umc/spring/post/config/security/SecurityUtil.java
index fe26efe..030ac5f 100644
--- a/src/main/java/umc/spring/post/config/security/SecurityUtil.java
+++ b/src/main/java/umc/spring/post/config/security/SecurityUtil.java
@@ -17,7 +17,6 @@ public class SecurityUtil {
         final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
 
         if (authentication == null || authentication.getName() == null) {
-            System.out.println("2번");
             throw new RuntimeException("No authentication information.");
         }
         MyUser myUser = (MyUser) authentication.getPrincipal();
diff --git a/src/main/java/umc/spring/post/controller/PostController.java b/src/main/java/umc/spring/post/controller/PostController.java
index 0035738..c2b532c 100644
--- a/src/main/java/umc/spring/post/controller/PostController.java
+++ b/src/main/java/umc/spring/post/controller/PostController.java
@@ -27,9 +27,9 @@ public class PostController {
 
     @ResponseStatus(HttpStatus.OK)
     @PostMapping("/post/upload")
-    public void upload(@RequestBody PostDto postDto){
+    public PostResDto upload(@RequestBody PostDto postDto){
         try{
-            postService.upload(postDto);
+            return postService.upload(postDto);
         }
         catch(Exception e){
             throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "token not Found");
@@ -63,6 +63,7 @@ public class PostController {
             postService.likeCrew(id);
         }
         catch (Exception e){
+            System.out.println("여기");
             throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "token not found");
         }
     }
diff --git a/src/main/java/umc/spring/post/data/dto/PostDto.java b/src/main/java/umc/spring/post/data/dto/PostDto.java
index e6830cf..78c39ea 100644
--- a/src/main/java/umc/spring/post/data/dto/PostDto.java
+++ b/src/main/java/umc/spring/post/data/dto/PostDto.java
@@ -9,6 +9,5 @@ import umc.spring.file.domain.S3File;
 public class PostDto {
     String title;
     String body;
-    int likeCount;
     S3File s3File;
 }
diff --git a/src/main/java/umc/spring/post/data/dto/PostResDto.java b/src/main/java/umc/spring/post/data/dto/PostResDto.java
index ccd903e..34bc73f 100644
--- a/src/main/java/umc/spring/post/data/dto/PostResDto.java
+++ b/src/main/java/umc/spring/post/data/dto/PostResDto.java
@@ -4,12 +4,15 @@ import jakarta.persistence.*;
 import lombok.*;
 import umc.spring.file.domain.S3File;
 import umc.spring.post.data.entity.Comment;
+import umc.spring.post.data.entity.LikeData;
 import umc.spring.post.data.entity.Post;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import static umc.spring.post.config.security.SecurityUtil.getCurrentMemberId;
+
 @Data
 @Builder
 public class PostResDto {
@@ -24,6 +27,8 @@ public class PostResDto {
     Date createdTime;
     Date modifiedTime;
     List<CommentResDto> comments;
+    boolean isHeart;
+
 
     public static PostResDto toDTO(Post post){
         List<CommentResDto> resDtos = new ArrayList<>();
@@ -31,6 +36,36 @@ public class PostResDto {
             CommentResDto dto = CommentResDto.toDTO(comment);
             resDtos.add(dto);
         });
+        UserInfoDto userInfoDto;
+        boolean flag=false;
+
+        try {
+            // 유저 모드
+            userInfoDto = getCurrentMemberId();
+            Long userId = userInfoDto.getUserId();
+            List<LikeData> likes = post.getLikes();
+            for (LikeData likeData : likes) {
+                if (likeData.getUser().getId().equals(userId)) {
+                    flag = true;
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            // 게스트 모드
+            return PostResDto.builder()
+                    .id(post.getId())
+                    .userId(post.getUserId())
+                    .s3File(post.getS3File())
+                    .title(post.getTitle())
+                    .author(post.getAuthor())
+                    .body(post.getBody())
+                    .likeCount(post.getLikes().size())
+                    .createdTime(post.getCreatedTime())
+                    .modifiedTime(post.getModifiedTime())
+                    .comments(resDtos)
+                    .isHeart(flag).build();
+        }
+
         return PostResDto.builder()
                 .id(post.getId())
                 .userId(post.getUserId())
@@ -41,6 +76,7 @@ public class PostResDto {
                 .likeCount(post.getLikes().size())
                 .createdTime(post.getCreatedTime())
                 .modifiedTime(post.getModifiedTime())
-                .comments(resDtos).build();
+                .comments(resDtos)
+                .isHeart(flag).build();
     }
 }
diff --git a/src/main/java/umc/spring/post/service/PostService.java b/src/main/java/umc/spring/post/service/PostService.java
index b3382a7..299f50b 100644
--- a/src/main/java/umc/spring/post/service/PostService.java
+++ b/src/main/java/umc/spring/post/service/PostService.java
@@ -11,7 +11,7 @@ import java.io.IOException;
 import java.util.List;
 
 public interface PostService {
-    void upload(PostDto postDto);
+    PostResDto upload(PostDto postDto);
 
     List<PostResDto> getAllPost();
 
diff --git a/src/main/java/umc/spring/post/service/PostServiceImpl.java b/src/main/java/umc/spring/post/service/PostServiceImpl.java
index e5a286f..403d3b4 100644
--- a/src/main/java/umc/spring/post/service/PostServiceImpl.java
+++ b/src/main/java/umc/spring/post/service/PostServiceImpl.java
@@ -1,6 +1,7 @@
 package umc.spring.post.service;
 
 
+import com.google.gson.Gson;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
@@ -44,7 +45,7 @@ public class PostServiceImpl implements PostService{
     }
 
     @Override
-    public void upload(PostDto postDto){
+    public PostResDto upload(PostDto postDto){
         UserInfoDto userInfoDto = getCurrentMemberId();
         Post post = new Post();
         setPost(postDto, post);
@@ -54,6 +55,7 @@ public class PostServiceImpl implements PostService{
         post.setModifiedTime(post.getCreatedTime());
 
         postRepository.save(post);
+        return PostResDto.toDTO(post);
     }
 
 
@@ -125,7 +127,6 @@ public class PostServiceImpl implements PostService{
     @Override
     public void likeCrew(Long id) {
         UserInfoDto userInfoDto = getCurrentMemberId();
-        // 내가 좋아요를 누른적이 있는지? 있으면 반영안됨
         Post post = postRepository.findById(id).orElseThrow(() -> new RuntimeException("id가 존재하지 않습니다."));
         User user = userRepository.findByLoginId(userInfoDto.getLoginId()).orElseThrow();
         Optional<LikeData> byPostAndUser = likeRepository.findByPostAndUser(post, user);
@@ -162,7 +163,6 @@ public class PostServiceImpl implements PostService{
         else{
             throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "좋아요를 누른 적이 없습니다");
         }
-
     }
 
     @Override
-- 
GitLab