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(); + } + } }