From 27fb0e7b3a4d2b0f59f95f464833144b00a7c817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=8D=EA=B9=80=EC=9A=A9=EB=B9=88?= Date: Thu, 3 Oct 2024 01:03:41 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EA=B0=9C=EC=88=98=20=EC=A1=B0=ED=9A=8C=20API=20(#4?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/business/post/PostService.java | 7 +++++++ .../business/post/implement/PostReader.java | 4 ++++ .../post/response/PostCountResponse.java | 18 ++++++++++++++++++ .../presentation/post/PostController.java | 8 ++++++++ .../post/docs/PostControllerDocs.java | 7 ++++++- .../repository/post/PostRepository.java | 2 ++ 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/main/java/project/backend/business/post/response/PostCountResponse.java diff --git a/src/main/java/project/backend/business/post/PostService.java b/src/main/java/project/backend/business/post/PostService.java index 48e2882..fd62c7e 100644 --- a/src/main/java/project/backend/business/post/PostService.java +++ b/src/main/java/project/backend/business/post/PostService.java @@ -17,6 +17,7 @@ import project.backend.business.post.request.PostListServiceRequest; import project.backend.business.post.request.UpdatePostServiceRequest; import project.backend.business.post.response.CreateUpdatePostResponse; +import project.backend.business.post.response.PostCountResponse; import project.backend.business.post.response.PostDetailResponse; import project.backend.business.post.response.PostListResponse; import project.backend.business.post.response.dto.PostDetailDto; @@ -58,6 +59,12 @@ public PostListResponse getPosts(Long userId, PostListServiceRequest postListSer return PostListResponse.from(postListDtos); } + @Transactional(readOnly = true) + public PostCountResponse getTotalPostCount(Long userId) { + int count = postReader.readActivatePostCountByUserId(userId); + return PostCountResponse.from(count); + } + @Transactional(readOnly = true) public PostDetailResponse getPostDetail(Long userId, PostDetailServiceRequest postDetailServiceRequest) { diff --git a/src/main/java/project/backend/business/post/implement/PostReader.java b/src/main/java/project/backend/business/post/implement/PostReader.java index 4c60ac2..94539f5 100644 --- a/src/main/java/project/backend/business/post/implement/PostReader.java +++ b/src/main/java/project/backend/business/post/implement/PostReader.java @@ -85,4 +85,8 @@ public PostDetailDto readPostDetailWithTags(Long userId, "yy.MM.dd")) .build(); } + + public int readActivatePostCountByUserId(Long userId) { + return postRepository.countPostsByUserIdAndStatusAndActivatedTrue(userId, PostStatus.PUBLISHED); + } } diff --git a/src/main/java/project/backend/business/post/response/PostCountResponse.java b/src/main/java/project/backend/business/post/response/PostCountResponse.java new file mode 100644 index 0000000..c0c5aa7 --- /dev/null +++ b/src/main/java/project/backend/business/post/response/PostCountResponse.java @@ -0,0 +1,18 @@ +package project.backend.business.post.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class PostCountResponse { + + private final int totalCount; + + public static PostCountResponse from(int count) { + return PostCountResponse.builder() + .totalCount(count) + .build(); + } + +} diff --git a/src/main/java/project/backend/presentation/post/PostController.java b/src/main/java/project/backend/presentation/post/PostController.java index 1ec9a7d..d452b52 100644 --- a/src/main/java/project/backend/presentation/post/PostController.java +++ b/src/main/java/project/backend/presentation/post/PostController.java @@ -18,6 +18,7 @@ import project.backend.business.post.request.PostDetailServiceRequest; import project.backend.business.post.request.PostListServiceRequest; import project.backend.business.post.response.CreateUpdatePostResponse; +import project.backend.business.post.response.PostCountResponse; import project.backend.business.post.response.PostDetailResponse; import project.backend.business.post.response.PostListResponse; import project.backend.presentation.post.docs.PostControllerDocs; @@ -35,6 +36,13 @@ public class PostController implements PostControllerDocs { private final PostService postService; + @AssignCurrentUserInfo + @GetMapping("/count") + public ResponseEntity getPostCount(CurrentUserInfo userInfo) { + PostCountResponse response = postService.getTotalPostCount(userInfo.getUserId()); + return new ResponseEntity<>(response, HttpStatus.OK); + } + @AssignCurrentUserInfo @GetMapping public ResponseEntity getPosts(CurrentUserInfo userInfo, diff --git a/src/main/java/project/backend/presentation/post/docs/PostControllerDocs.java b/src/main/java/project/backend/presentation/post/docs/PostControllerDocs.java index a880a2c..a3f80bb 100644 --- a/src/main/java/project/backend/presentation/post/docs/PostControllerDocs.java +++ b/src/main/java/project/backend/presentation/post/docs/PostControllerDocs.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; import project.backend.business.post.response.CreateUpdatePostResponse; +import project.backend.business.post.response.PostCountResponse; import project.backend.business.post.response.PostDetailResponse; import project.backend.business.post.response.PostListResponse; import project.backend.entity.post.PostStatus; @@ -16,7 +17,7 @@ @Tag(name = "게시글 API") public interface PostControllerDocs { - @Operation(summary = "게시글 목록 조회 API", description = "로그인한 유저가 작성한 게시글을 최근 작성한 순서대로 조회합니다.") + @Operation(summary = "게시글 목록 조회 API", description = "로그인한 유저의 게시글을 최근 작성한 순서대로 조회.") @Parameter(name = "userInfo", hidden = true) @Parameter(name = "page", description = "조회할 페이지 번호. 시작 = 0") @Parameter(name = "archiveId", description = "조회할 아카이브 번호.") @@ -27,6 +28,10 @@ ResponseEntity getPosts( Long archiveId, String search); + @Operation(summary = "게시글 개수 조회 API", description = "로그인한 유저가 작성한 게시글의 총 개수 조회.") + @Parameter(name = "userInfo", hidden = true) + ResponseEntity getPostCount(CurrentUserInfo userInfo); + @Operation(summary = "요약 요청 API", description = "요약 옵션을 통해 웹사이트 요약.") @Parameter(name = "userInfo", hidden = true) ResponseEntity createPost( diff --git a/src/main/java/project/backend/repository/post/PostRepository.java b/src/main/java/project/backend/repository/post/PostRepository.java index 8b63860..6af5d56 100644 --- a/src/main/java/project/backend/repository/post/PostRepository.java +++ b/src/main/java/project/backend/repository/post/PostRepository.java @@ -10,6 +10,8 @@ @Repository public interface PostRepository extends JpaRepository, JpaSpecificationExecutor { + int countPostsByUserIdAndStatusAndActivatedTrue(Long userId, PostStatus status); + Optional findPostAndUserAndActivatedTrueById(Long postId); Optional findByIdAndUserIdAndActivatedTrue(Long postId, Long userId);