From 16d7dd9170eb85e1a1baa010b7ce50322e4b5c62 Mon Sep 17 00:00:00 2001 From: SeokGeunHo Date: Tue, 23 Sep 2025 15:29:07 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=8C=93=EA=B8=80=20=EB=8B=A4=EA=B1=B4?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comment/controller/CommentController.java | 11 +++++++++++ .../comment/repository/CommentRepository.java | 4 ++++ .../post/comment/service/CommentService.java | 17 +++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/src/main/java/com/back/domain/post/comment/controller/CommentController.java b/src/main/java/com/back/domain/post/comment/controller/CommentController.java index 4e9cbca8..7fb2c3e0 100644 --- a/src/main/java/com/back/domain/post/comment/controller/CommentController.java +++ b/src/main/java/com/back/domain/post/comment/controller/CommentController.java @@ -7,11 +7,14 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @@ -37,4 +40,12 @@ public RsData createComment( return RsData.successOf(commentService.createComment(postId, reqBody)); // code=200, message="success" } + @GetMapping + @Operation(summary = "댓글 다건 조회") + public RsData> getComments( + @PathVariable Long postId, + @RequestParam(required = false) Long lastId + ) { + return RsData.successOf(commentService.getComments(postId, lastId)); // code=200, message="success" + } } diff --git a/src/main/java/com/back/domain/post/comment/repository/CommentRepository.java b/src/main/java/com/back/domain/post/comment/repository/CommentRepository.java index c7658ef4..238ee02b 100644 --- a/src/main/java/com/back/domain/post/comment/repository/CommentRepository.java +++ b/src/main/java/com/back/domain/post/comment/repository/CommentRepository.java @@ -1,10 +1,14 @@ package com.back.domain.post.comment.repository; import com.back.domain.post.comment.entity.Comment; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface CommentRepository extends JpaRepository { + List findTop10ByPostIdOrderByIdDesc(Long postId); + + List findTop10ByPostIdAndIdLessThanOrderByIdDesc(Long postId, Long lastId); } diff --git a/src/main/java/com/back/domain/post/comment/service/CommentService.java b/src/main/java/com/back/domain/post/comment/service/CommentService.java index e35195ba..6d9977ac 100644 --- a/src/main/java/com/back/domain/post/comment/service/CommentService.java +++ b/src/main/java/com/back/domain/post/comment/service/CommentService.java @@ -8,6 +8,7 @@ import com.back.domain.post.post.repository.PostRepository; import com.back.domain.user.entity.User; import com.back.global.rq.Rq; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -36,4 +37,20 @@ public CommentResponseDto createComment(Long postId, CommentCreateRequestDto req return new CommentResponseDto(commentRepository.save(comment)); } + + // 댓글 다건 조회 로직 (무한스크롤) + @Transactional(readOnly = true) + public List getComments(Long postId, Long lastId) { + if (lastId == null) { + return commentRepository.findTop10ByPostIdOrderByIdDesc(postId) + .stream() + .map(CommentResponseDto::new) + .toList(); + } else { + return commentRepository.findTop10ByPostIdAndIdLessThanOrderByIdDesc(postId, lastId) + .stream() + .map(CommentResponseDto::new) + .toList(); + } + } }