diff --git a/src/main/java/com/example/be/apiPayload/exception/handler/PostHandler.java b/src/main/java/com/example/be/apiPayload/exception/handler/PostHandler.java new file mode 100644 index 0000000..82d3bda --- /dev/null +++ b/src/main/java/com/example/be/apiPayload/exception/handler/PostHandler.java @@ -0,0 +1,10 @@ +package com.example.be.apiPayload.exception.handler; + +import com.example.be.apiPayload.code.BaseErrorCode; +import com.example.be.apiPayload.exception.GeneralException; + +public class PostHandler extends GeneralException { + public PostHandler(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/example/be/domain/Comment.java b/src/main/java/com/example/be/domain/Comment.java index 8b05201..8db8241 100644 --- a/src/main/java/com/example/be/domain/Comment.java +++ b/src/main/java/com/example/be/domain/Comment.java @@ -39,4 +39,7 @@ public class Comment { @OneToMany(mappedBy = "topParent", cascade = CascadeType.ALL) private List children = new ArrayList<>(); // 직계 자식 + + @OneToMany(mappedBy = "comment", cascade = CascadeType.ALL, orphanRemoval = true) + private List likes = new ArrayList<>(); } \ No newline at end of file diff --git a/src/main/java/com/example/be/domain/CommentLike.java b/src/main/java/com/example/be/domain/CommentLike.java new file mode 100644 index 0000000..245297f --- /dev/null +++ b/src/main/java/com/example/be/domain/CommentLike.java @@ -0,0 +1,32 @@ +package com.example.be.domain; + +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(uniqueConstraints = { + @UniqueConstraint(columnNames = {"user_id", "comment_id"}) +}) +public class CommentLike { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "comment_id") + private Comment comment; + + private LocalDateTime createDate; +} \ No newline at end of file diff --git a/src/main/java/com/example/be/domain/Post.java b/src/main/java/com/example/be/domain/Post.java index 357674d..c960dc3 100644 --- a/src/main/java/com/example/be/domain/Post.java +++ b/src/main/java/com/example/be/domain/Post.java @@ -24,8 +24,6 @@ public class Post { private String content; - private boolean isDone = false; - private LocalDateTime createDate; diff --git a/src/main/java/com/example/be/repository/CommentLikeRepository.java b/src/main/java/com/example/be/repository/CommentLikeRepository.java new file mode 100644 index 0000000..7c56b3e --- /dev/null +++ b/src/main/java/com/example/be/repository/CommentLikeRepository.java @@ -0,0 +1,22 @@ +package com.example.be.repository; + +import com.example.be.domain.Comment; +import com.example.be.domain.CommentLike; +import com.example.be.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Optional; + +public interface CommentLikeRepository extends JpaRepository { + + Optional findByUserAndComment(User user, Comment comment); + + boolean existsByUserAndComment(User user, Comment comment); + + long countByComment(Comment comment); + + @Query("SELECT COUNT(cl) FROM CommentLike cl WHERE cl.comment.id = :commentId") + long countByCommentId(@Param("commentId") Long commentId); +} \ No newline at end of file diff --git a/src/main/java/com/example/be/repository/PostRepository.java b/src/main/java/com/example/be/repository/PostRepository.java index 7afc8bb..e63bd21 100644 --- a/src/main/java/com/example/be/repository/PostRepository.java +++ b/src/main/java/com/example/be/repository/PostRepository.java @@ -11,11 +11,8 @@ import java.util.Optional; public interface PostRepository extends JpaRepository { - // PostRepository에 추가 - @Query("SELECT p FROM Post p LEFT JOIN FETCH p.comments ORDER BY p.createDate DESC") Page findAllByOrderByCreateDateDesc(Pageable pageable); - // ID로 게시글 조회 (댓글 포함) @EntityGraph(attributePaths = {"comments", "comments.user", "user"}) Optional findById(Long id); } diff --git a/src/main/java/com/example/be/service/CommentLikeServiceImpl.java b/src/main/java/com/example/be/service/CommentLikeServiceImpl.java new file mode 100644 index 0000000..55fb9ba --- /dev/null +++ b/src/main/java/com/example/be/service/CommentLikeServiceImpl.java @@ -0,0 +1,94 @@ +package com.example.be.service; + +import com.example.be.apiPayload.code.status.ErrorStatus; +import com.example.be.apiPayload.exception.handler.UserHandler; +import com.example.be.domain.Comment; +import com.example.be.domain.CommentLike; +import com.example.be.domain.User; +import com.example.be.repository.CommentLikeRepository; +import com.example.be.repository.CommentRepository; +import com.example.be.repository.UserRepository; +import com.example.be.web.dto.CommentDTO; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class CommentLikeServiceImpl { + private final JwtUtilServiceImpl jwtUtilService; + private final UserRepository userRepository; + private final CommentRepository commentRepository; + private final CommentLikeRepository commentLikeRepository; + + private User getUserFromRequest(HttpServletRequest request) { + try { + String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); + if (accessToken != null) { + String userId = jwtUtilService.getUserIdFromToken(accessToken); + return userRepository.findByUserId(UUID.fromString(userId)).orElse(null); + } + } catch (Exception e) { + throw new UserHandler(ErrorStatus._NOT_FOUND_COOKIE); + } + return null; + } + + @Transactional + public CommentDTO.CommentLikeResponseDTO toggleCommentLike(Long commentId, HttpServletRequest request) { + + User user= getUserFromRequest(request); + + // 댓글 정보 가져오기 + Comment comment = commentRepository.findById(commentId) + .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_COMMENT)); + + // 이미 좋아요를 눌렀는지 확인 + Optional existingLike = commentLikeRepository.findByUserAndComment(user, comment); + + boolean isLiked; + if (existingLike.isPresent()) { + // 좋아요가 이미 있으면 삭제 (좋아요 취소) + commentLikeRepository.delete(existingLike.get()); + isLiked = false; + } else { + // 좋아요가 없으면 추가 + CommentLike commentLike = CommentLike.builder() + .user(user) + .comment(comment) + .createDate(LocalDateTime.now()) + .build(); + commentLikeRepository.save(commentLike); + isLiked = true; + } + + // 좋아요 수 조회 + long likeCount = commentLikeRepository.countByComment(comment); + + return CommentDTO.CommentLikeResponseDTO.builder() + .commentId(commentId) + .liked(isLiked) + .likeCount(likeCount) + .build(); + } + + // 특정 댓글에 대한 사용자의 좋아요 여부 확인 + public boolean isCommentLikedByUser(Comment comment, User user) { + return commentLikeRepository.existsByUserAndComment(user, comment); + } + + // 특정 댓글의 좋아요 수 조회 + public long getCommentLikeCount(Comment comment) { + return commentLikeRepository.countByComment(comment); + } + + // 특정 댓글 ID의 좋아요 수 조회 + public long getCommentLikeCount(Long commentId) { + return commentLikeRepository.countByCommentId(commentId); + } +} diff --git a/src/main/java/com/example/be/service/CommentServiceImpl.java b/src/main/java/com/example/be/service/CommentServiceImpl.java index 41ff46d..ec324bf 100644 --- a/src/main/java/com/example/be/service/CommentServiceImpl.java +++ b/src/main/java/com/example/be/service/CommentServiceImpl.java @@ -28,16 +28,22 @@ public class CommentServiceImpl { private final PostRepository postRepository; private final CommentRepository commentRepository; - @Transactional - public CommonDTO.IsSuccessDTO createComment(CommentDTO.CommentRequestDTO requestDTO, HttpServletRequest request) { - String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); - if (accessToken == null) { - throw new UserHandler(ErrorStatus._NOT_FOUND_USER); + private User getUserFromRequest(HttpServletRequest request) { + try { + String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); + if (accessToken != null) { + String userId = jwtUtilService.getUserIdFromToken(accessToken); + return userRepository.findByUserId(UUID.fromString(userId)).orElse(null); + } + } catch (Exception e) { + throw new UserHandler(ErrorStatus._NOT_FOUND_COOKIE); } + return null; + } - String userId = jwtUtilService.getUserIdFromToken(accessToken); - User user = userRepository.findByUserId(UUID.fromString(userId)) - .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_USER)); + @Transactional + public CommonDTO.IsSuccessDTO createComment(CommentDTO.CommentRequestDTO requestDTO, HttpServletRequest request) { + User user= getUserFromRequest(request); Post post = postRepository.findById(requestDTO.getPostId()) .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_POST)); diff --git a/src/main/java/com/example/be/service/JwtUtilServiceImpl.java b/src/main/java/com/example/be/service/JwtUtilServiceImpl.java index 8bfb02a..ffd668d 100644 --- a/src/main/java/com/example/be/service/JwtUtilServiceImpl.java +++ b/src/main/java/com/example/be/service/JwtUtilServiceImpl.java @@ -74,7 +74,6 @@ public String getUserIdFromToken(String token) { .parseSignedClaims(token) .getPayload() .get("userId", String.class); - log.info("유저 id를 반환합니다."); return userId; } catch (JwtException | IllegalArgumentException e) { // 토큰이 유효하지 않은 경우 diff --git a/src/main/java/com/example/be/service/PostLikeServiceImpl.java b/src/main/java/com/example/be/service/PostLikeServiceImpl.java index 8f7dcaa..6b4e331 100644 --- a/src/main/java/com/example/be/service/PostLikeServiceImpl.java +++ b/src/main/java/com/example/be/service/PostLikeServiceImpl.java @@ -27,32 +27,34 @@ public class PostLikeServiceImpl { private final PostRepository postRepository; private final PostLikeRepository postLikeRepository; - @Transactional - public PostDTO.PostLikeResponseDTO togglePostLike(Long postId, HttpServletRequest request) { - // 토큰에서 사용자 정보 가져오기 - String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); - if (accessToken == null) { - throw new UserHandler(ErrorStatus._NOT_FOUND_USER); + private User getUserFromRequest(HttpServletRequest request) { + try { + String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); + if (accessToken != null) { + String userId = jwtUtilService.getUserIdFromToken(accessToken); + return userRepository.findByUserId(UUID.fromString(userId)).orElse(null); + } + } catch (Exception e) { + throw new UserHandler(ErrorStatus._NOT_FOUND_COOKIE); } + return null; + } - String userId = jwtUtilService.getUserIdFromToken(accessToken); - User user = userRepository.findByUserId(UUID.fromString(userId)) - .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_USER)); - // 게시글 정보 가져오기 + @Transactional + public PostDTO.PostLikeResponseDTO togglePostLike(Long postId, HttpServletRequest request) { + + User user = getUserFromRequest(request); Post post = postRepository.findById(postId) .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_POST)); - // 이미 좋아요를 눌렀는지 확인 Optional existingLike = postLikeRepository.findByUserAndPost(user, post); boolean isLiked; if (existingLike.isPresent()) { - // 좋아요가 이미 있으면 삭제 (좋아요 취소) postLikeRepository.delete(existingLike.get()); isLiked = false; } else { - // 좋아요가 없으면 추가 PostLike postLike = PostLike.builder() .user(user) .post(post) diff --git a/src/main/java/com/example/be/service/PostServiceImpl.java b/src/main/java/com/example/be/service/PostServiceImpl.java index bb8e015..1ea6bfe 100644 --- a/src/main/java/com/example/be/service/PostServiceImpl.java +++ b/src/main/java/com/example/be/service/PostServiceImpl.java @@ -3,11 +3,14 @@ import com.example.be.apiPayload.ApiResponse; import com.example.be.apiPayload.code.status.ErrorStatus; +import com.example.be.apiPayload.exception.handler.PostHandler; import com.example.be.apiPayload.exception.handler.UserHandler; +import com.example.be.domain.Comment; import com.example.be.domain.Post; import com.example.be.domain.User; import com.example.be.repository.PostRepository; import com.example.be.repository.UserRepository; +import com.example.be.web.dto.CommentDTO; import com.example.be.web.dto.CommonDTO; import com.example.be.web.dto.PostDTO; import com.example.be.web.dto.UserDTO; @@ -32,23 +35,25 @@ public class PostServiceImpl { private final UserRepository userRepository; private final PostRepository postRepository; private final PostLikeServiceImpl postLikeService; + private final CommentLikeServiceImpl commentLikeService; + // 사용자 정보 가져오는 메서드 + private User getUserFromRequest(HttpServletRequest request) { + try { + String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); + if (accessToken != null) { + String userId = jwtUtilService.getUserIdFromToken(accessToken); + return userRepository.findByUserId(UUID.fromString(userId)).orElse(null); + } + } catch (Exception e) { + throw new UserHandler(ErrorStatus._NOT_FOUND_COOKIE); + } + return null; + } //글 작성 메서드 public CommonDTO.IsSuccessDTO write(PostDTO.postRequestDTO request, HttpServletRequest req) { - String accessToken = jwtUtilService.extractTokenFromCookie(req, "accessToken"); - - // 토큰이 없는 경우 처리 - if(accessToken == null) { - throw new UserHandler(ErrorStatus._NOT_FOUND_USER); - } - - // 토큰에서 사용자 ID 추출 - String userId = jwtUtilService.getUserIdFromToken(accessToken); - - // 사용자 정보 조회 - User user = userRepository.findByUserId(UUID.fromString(userId)) - .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_USER)); + User user= getUserFromRequest(req); Post post = Post.builder() .title(request.getTitle()) @@ -59,7 +64,6 @@ public CommonDTO.IsSuccessDTO write(PostDTO.postRequestDTO request, HttpServletR postRepository.save(post); - return CommonDTO.IsSuccessDTO.builder().isSuccess(true).build(); } @@ -74,7 +78,6 @@ public PostDTO.PageResponseDTO getPosts(int page, int size) { .content(post.getContent()) .userName(post.getUser().getName()) .createDate(post.getCreateDate().toLocalDate()) - .isDone(post.isDone()) .commentCount(post.getComments() != null ? post.getComments().size() : 0) .likeCount(postLikeService.getPostLikeCount(post)) .build()) @@ -90,43 +93,44 @@ public PostDTO.PageResponseDTO getPosts(int page, int size) { .build(); } - // 게시글 상세 조회 메서드 - public PostDTO.PostDetailResponseDTO getPostDetail(Long postId, HttpServletRequest request) { - Post post = postRepository.findById(postId) - .orElseThrow(() -> new UserHandler(ErrorStatus._NOT_FOUND_POST)); - // 현재 로그인한 사용자 정보 가져오기 (좋아요 여부 확인용) - User currentUser = null; - boolean isLiked = false; - - try { - String accessToken = jwtUtilService.extractTokenFromCookie(request, "accessToken"); - if (accessToken != null) { - String userId = jwtUtilService.getUserIdFromToken(accessToken); - currentUser = userRepository.findByUserId(UUID.fromString(userId)).orElse(null); - - // 현재 사용자가 이 게시글에 좋아요를 눌렀는지 확인 - if (currentUser != null) { - isLiked = postLikeService.isPostLikedByUser(post, currentUser); - } - } - } catch (Exception e) { - // 비로그인 사용자도 게시글을 볼 수 있도록 예외를 무시하고 진행 + private boolean isCommentLikedByUser(Comment comment, User user) { + if (user == null) { + return false; } + return commentLikeService.isCommentLikedByUser(comment, user); + } - // 댓글 목록 변환 - List commentDtoList = post.getComments().stream() - .map(comment -> PostDTO.CommentResponseDTO.builder() - .id(comment.getId()) - .comment(comment.getComment()) - .userName(comment.getUser().getName()) - .createDate(comment.getCreateDate()) - .topParentId(comment.getTopParent() != null ? comment.getTopParent().getId() : null) - .build()) + // 게시글 상세 조회 메서드 + public PostDTO.PostDetailResponseDTO getPostDetail(Long postId, HttpServletRequest request) { + Post post = postRepository.findById(postId) + .orElseThrow(() -> new PostHandler(ErrorStatus._NOT_FOUND_POST)); + + // 현재 로그인한 사용자 정보 가져오기 + User currentUser = getUserFromRequest(request); + boolean isPostLiked = currentUser != null && postLikeService.isPostLikedByUser(post, currentUser); + + // 댓글 목록 변환 (좋아요 정보 포함) + List commentDtoList = post.getComments().stream() + .map(comment -> { + // 현재 사용자가 이 댓글에 좋아요를 눌렀는지 확인 + boolean isCommentLiked = isCommentLikedByUser(comment, currentUser); + long commentLikeCount = commentLikeService.getCommentLikeCount(comment); + + return CommentDTO.CommentResponseDTO.builder() + .id(comment.getId()) + .comment(comment.getComment()) + .userName(comment.getUser().getName()) + .createDate(comment.getCreateDate()) + .topParentId(comment.getTopParent() != null ? comment.getTopParent().getId() : null) + .likeCount(commentLikeCount) + .liked(isCommentLiked) + .build(); + }) .collect(Collectors.toList()); - // 좋아요 수 조회 - long likeCount = postLikeService.getPostLikeCount(post); + // 게시글의 좋아요 수 조회 + long postLikeCount = postLikeService.getPostLikeCount(post); // 게시글 상세 정보 변환 return PostDTO.PostDetailResponseDTO.builder() @@ -135,12 +139,12 @@ public PostDTO.PostDetailResponseDTO getPostDetail(Long postId, HttpServletReque .content(post.getContent()) .userName(post.getUser().getName()) .createDate(post.getCreateDate()) - .isDone(post.isDone()) .commentCount(commentDtoList.size()) .comments(commentDtoList) - // 좋아요 정보 추가 - .likeCount(likeCount) - .liked(isLiked) + .likeCount(postLikeCount) + .liked(isPostLiked) .build(); } + + } diff --git a/src/main/java/com/example/be/web/controller/CommentController.java b/src/main/java/com/example/be/web/controller/CommentController.java index c4da8b1..de4c5d2 100644 --- a/src/main/java/com/example/be/web/controller/CommentController.java +++ b/src/main/java/com/example/be/web/controller/CommentController.java @@ -1,17 +1,16 @@ package com.example.be.web.controller; import com.example.be.apiPayload.ApiResponse; +import com.example.be.service.CommentLikeServiceImpl; import com.example.be.service.CommentServiceImpl; import com.example.be.service.PostServiceImpl; import com.example.be.web.dto.CommentDTO; import com.example.be.web.dto.CommonDTO; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/comment") @@ -19,6 +18,7 @@ public class CommentController { private final PostServiceImpl postService; private final CommentServiceImpl commentService; + private final CommentLikeServiceImpl commentLikeService; @PostMapping("") @Operation(summary = "댓글 작성 API", description = "게시글에 댓글을 작성하거나 다른 댓글에 대한 답글을 작성합니다.") @@ -27,4 +27,12 @@ public ApiResponse createComment( HttpServletRequest request) { return ApiResponse.onSuccess(commentService.createComment(requestDTO, request)); } + + @PostMapping("/{commentId}/like") + @Operation(summary = "댓글 좋아요 토글 API", description = "댓글에 좋아요를 누르거나 취소합니다.") + public ApiResponse toggleCommentLike( + @Parameter(description = "댓글 ID") @PathVariable Long commentId, + HttpServletRequest request) { + return ApiResponse.onSuccess(commentLikeService.toggleCommentLike(commentId, request)); + } } diff --git a/src/main/java/com/example/be/web/controller/PostController.java b/src/main/java/com/example/be/web/controller/PostController.java index 9e32227..db2dac9 100644 --- a/src/main/java/com/example/be/web/controller/PostController.java +++ b/src/main/java/com/example/be/web/controller/PostController.java @@ -36,7 +36,7 @@ public ApiResponse write(@RequestBody PostDTO.postReques } @GetMapping("/list") - @Operation(summary = "게시글 목록 조회 API (페이지네이션)", description = "15개씩 페이지네이션하여 게시글 목록을 조회합니다.") + @Operation(summary = "게시글 목록 조회 API (페이지네이션)", description = "4개씩 페이지네이션하여 게시글 목록을 조회합니다.") public ApiResponse getPosts( @Parameter(description = "페이지 번호 (0부터 시작)") @RequestParam(defaultValue = "0") int page) { return ApiResponse.onSuccess(postService.getPosts(page, 4)); // 4개씩 페이지네이션 diff --git a/src/main/java/com/example/be/web/dto/CommentDTO.java b/src/main/java/com/example/be/web/dto/CommentDTO.java index 338e237..d0aacee 100644 --- a/src/main/java/com/example/be/web/dto/CommentDTO.java +++ b/src/main/java/com/example/be/web/dto/CommentDTO.java @@ -1,11 +1,14 @@ package com.example.be.web.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + public class CommentDTO { @Builder @@ -18,4 +21,36 @@ public static class CommentRequestDTO { private Long postId; private Long parentCommentId; } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + @Schema(description = "댓글 좋아요 응답 DTO") + public static class CommentLikeResponseDTO { + private Long commentId; + private boolean liked; + private long likeCount; + } + + // 기존 CommentResponseDTO에 좋아요 관련 필드 추가 + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + @Schema(description = "댓글 응답 DTO") + public static class CommentResponseDTO { + private Long id; + private String comment; + private String userName; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createDate; + + private Long topParentId; // 상위 댓글 ID (답글인 경우) + + // 좋아요 관련 필드 추가 + private long likeCount; + private boolean liked; // 현재 사용자가 좋아요를 눌렀는지 여부 + } } diff --git a/src/main/java/com/example/be/web/dto/PostDTO.java b/src/main/java/com/example/be/web/dto/PostDTO.java index 22fef93..321eb65 100644 --- a/src/main/java/com/example/be/web/dto/PostDTO.java +++ b/src/main/java/com/example/be/web/dto/PostDTO.java @@ -36,7 +36,6 @@ public static class postResponseDTO { @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate createDate; private int commentCount; - private boolean isDone; } @Builder @@ -53,21 +52,6 @@ public static class PageResponseDTO { private boolean last; } - @Builder - @Getter - @NoArgsConstructor - @AllArgsConstructor - @Schema(description = "댓글 응답 DTO") - public static class CommentResponseDTO { - private Long id; - private String comment; - private String userName; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime createDate; - - private Long topParentId; - } @Builder @Getter @@ -83,9 +67,8 @@ public static class PostDetailResponseDTO { private boolean liked; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createDate; - private boolean isDone; private int commentCount; - private List comments; + private List comments; } @Builder diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3c2d499..f1263c2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -47,7 +47,7 @@ spring: user-name-attribute: id jpa: hibernate: - ddl-auto: update + ddl-auto: create naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl properties: