From a23b8fc4c2534c869786f8e172c3d76c05dbe4f8 Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Thu, 14 Nov 2024 01:38:16 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20#36=20Page=EB=A1=9C=20=EB=A7=88?= =?UTF-8?q?=EC=A7=80=EB=A7=89=20=ED=82=A4=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../article/controller/ArticleController.java | 5 ++-- .../domain/repository/ArticleRepository.java | 8 +++---- .../article/service/ArticleService.java | 24 +++++++------------ 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java b/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java index 78ce665..2f7929b 100644 --- a/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java +++ b/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.UUID; +import org.springframework.data.domain.Page; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -88,11 +89,11 @@ public ResponseEntity> getArticle( //메인 페이지 게시글 조회 @GetMapping @Operation(summary = "게시글 목록 조회(스크롤)", description = "페이징을 적용하여 게시글 목록을 조회합니다.") - public ResponseEntity>> getArticles( + public ResponseEntity>> getArticles( HttpServletRequest request, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime cursor, @RequestParam(defaultValue = "10") int size) { - List articles = articleService.getArticles(request, cursor, size); + Page articles = articleService.getArticles(request, cursor, size); return ResponseEntity.status(HttpStatus.OK).body(GlobalResponseDto.success(articles)); } diff --git a/src/main/java/com/leets/xcellentbe/domain/article/domain/repository/ArticleRepository.java b/src/main/java/com/leets/xcellentbe/domain/article/domain/repository/ArticleRepository.java index c7b7489..f5d19c4 100644 --- a/src/main/java/com/leets/xcellentbe/domain/article/domain/repository/ArticleRepository.java +++ b/src/main/java/com/leets/xcellentbe/domain/article/domain/repository/ArticleRepository.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.UUID; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -17,11 +18,8 @@ public interface ArticleRepository extends JpaRepository { @Query("SELECT new com.leets.xcellentbe.domain.article.dto.ArticlesWithMediaDto(p, pm.filePath) FROM Article p LEFT JOIN ArticleMedia pm ON p.articleId = pm.article.articleId WHERE p.writer = :user") List findPostsByWriter(User user); - @Query("SELECT a FROM Article a WHERE a.deletedStatus = com.leets.xcellentbe.domain.shared.DeletedStatus.NOT_DELETED ORDER BY a.createdAt DESC") - List
findRecentArticles(Pageable pageable); - - @Query("SELECT a FROM Article a WHERE a.createdAt < :cursor AND a.deletedStatus = com.leets.xcellentbe.domain.shared.DeletedStatus.NOT_DELETED ORDER BY a.createdAt DESC") - List
findRecentArticles(@Param("cursor") LocalDateTime cursor, Pageable pageable); + @Query("SELECT a FROM Article a WHERE (:cursor IS NULL OR a.createdAt < :cursor) AND a.deletedStatus = com.leets.xcellentbe.domain.shared.DeletedStatus.NOT_DELETED ORDER BY a.createdAt DESC") + Page
findRecentArticles(@Param("cursor") LocalDateTime cursor, Pageable pageable); @Query("SELECT COUNT(a) FROM Article a WHERE a.rePost = :article AND a.deletedStatus = com.leets.xcellentbe.domain.shared.DeletedStatus.NOT_DELETED") long countReposts(@Param("article") Article article); diff --git a/src/main/java/com/leets/xcellentbe/domain/article/service/ArticleService.java b/src/main/java/com/leets/xcellentbe/domain/article/service/ArticleService.java index 130632c..bae8430 100644 --- a/src/main/java/com/leets/xcellentbe/domain/article/service/ArticleService.java +++ b/src/main/java/com/leets/xcellentbe/domain/article/service/ArticleService.java @@ -8,6 +8,7 @@ import java.util.UUID; import java.util.stream.Collectors; +import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -175,24 +176,17 @@ public ArticleResponseDto getArticle(HttpServletRequest request, UUID articleId) } //게시글 전체 조회 - public List getArticles(HttpServletRequest request, LocalDateTime cursor, int size) { - + public Page getArticles(HttpServletRequest request, LocalDateTime cursor, int size) { User user = getUser(request); - Pageable pageable = PageRequest.of(0, size); - List
articles = (cursor == null) ? - articleRepository.findRecentArticles(pageable) : // 처음 로드 시 - articleRepository.findRecentArticles(cursor, pageable); - - return articles - .stream() - .map(article -> { - boolean isOwner = article.getWriter().getUserId().equals(user.getUserId()); - ArticleStatsDto stats = findArticleStats(article); - return ArticleResponseDto.fromWithoutComments(article, isOwner, stats); - }) - .collect(Collectors.toList()); + Page
articles = articleRepository.findRecentArticles(cursor, pageable); + + return articles.map(article -> { + boolean isOwner = article.getWriter().getUserId().equals(user.getUserId()); + ArticleStatsDto stats = findArticleStats(article); + return ArticleResponseDto.fromWithoutComments(article, isOwner, stats); + }); } //리포스트 작성 (인용 x, 단순) From 3724e578e708e05345911556e0c2f8f97e7a7c1e Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Thu, 14 Nov 2024 01:52:25 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20#36=20Page=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/article/controller/ArticleController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java b/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java index 2f7929b..a2bf4d8 100644 --- a/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java +++ b/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java @@ -2,7 +2,9 @@ import java.time.LocalDateTime; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import org.springframework.data.domain.Page; @@ -87,13 +89,15 @@ public ResponseEntity> getArticle( } //메인 페이지 게시글 조회 - @GetMapping + @GetMapping("/articles") @Operation(summary = "게시글 목록 조회(스크롤)", description = "페이징을 적용하여 게시글 목록을 조회합니다.") public ResponseEntity>> getArticles( HttpServletRequest request, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime cursor, @RequestParam(defaultValue = "10") int size) { + Page articles = articleService.getArticles(request, cursor, size); + return ResponseEntity.status(HttpStatus.OK).body(GlobalResponseDto.success(articles)); } From f7420adfbe389f2e6d9812107258b08e91516750 Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Thu, 14 Nov 2024 02:05:00 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20#36=20api=20=EC=98=A4=ED=83=80?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcellentbe/domain/article/controller/ArticleController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java b/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java index a2bf4d8..cfcec3c 100644 --- a/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java +++ b/src/main/java/com/leets/xcellentbe/domain/article/controller/ArticleController.java @@ -89,7 +89,7 @@ public ResponseEntity> getArticle( } //메인 페이지 게시글 조회 - @GetMapping("/articles") + @GetMapping @Operation(summary = "게시글 목록 조회(스크롤)", description = "페이징을 적용하여 게시글 목록을 조회합니다.") public ResponseEntity>> getArticles( HttpServletRequest request,