diff --git a/src/main/java/com/daramg/server/post/application/PostQueryService.java b/src/main/java/com/daramg/server/post/application/PostQueryService.java index 7a21cd4..60b6149 100644 --- a/src/main/java/com/daramg/server/post/application/PostQueryService.java +++ b/src/main/java/com/daramg/server/post/application/PostQueryService.java @@ -125,8 +125,10 @@ public PageResponseDto getUserScrappedPosts(Long userId, PageRe ); } + @Transactional public PostDetailResponse getPostById(Long postId, User user) { Post post = entityUtils.getEntity(postId, Post.class); + post.incrementViewCount(); Boolean isLiked = user != null ? postLikeRepository.existsByPostIdAndUserId(postId, user.getId()) : null; Boolean isScrapped = user != null ? postScrapRepository.existsByPostIdAndUserId(postId, user.getId()) : null; List comments = commentRepository.findByPostIdAndIsBlockedFalseOrderByCreatedAtAsc(postId); diff --git a/src/main/java/com/daramg/server/post/domain/Post.java b/src/main/java/com/daramg/server/post/domain/Post.java index c1b5db7..8536703 100644 --- a/src/main/java/com/daramg/server/post/domain/Post.java +++ b/src/main/java/com/daramg/server/post/domain/Post.java @@ -53,6 +53,9 @@ public abstract class Post extends BaseEntity { @Column(name = "comment_count", nullable = false) private int commentCount = 0; + @Column(name = "view_count", nullable = false) + private int viewCount = 0; + @Column(name = "is_blocked", nullable = false) private boolean isBlocked = false; @@ -133,6 +136,10 @@ public void incrementCommentCount(){ commentCount++; } + public void incrementViewCount(){ + viewCount++; + } + public void softDelete() { if (this.isDeleted) return; diff --git a/src/main/java/com/daramg/server/post/dto/PostDetailResponse.java b/src/main/java/com/daramg/server/post/dto/PostDetailResponse.java index 0e6b3dd..f7f0271 100644 --- a/src/main/java/com/daramg/server/post/dto/PostDetailResponse.java +++ b/src/main/java/com/daramg/server/post/dto/PostDetailResponse.java @@ -26,6 +26,7 @@ public record PostDetailResponse( PostStatus postStatus, int likeCount, int commentCount, + int viewCount, boolean isBlocked, LocalDateTime createdAt, LocalDateTime updatedAt, @@ -76,6 +77,7 @@ public static PostDetailResponse from(Post post, Boolean isLiked, Boolean isScra post.getPostStatus(), post.getLikeCount(), post.getCommentCount(), + post.getViewCount(), post.isBlocked(), post.getCreatedAt(), post.getUpdatedAt(), diff --git a/src/main/resources/db/migration/V7__add_view_count_to_posts.sql b/src/main/resources/db/migration/V7__add_view_count_to_posts.sql new file mode 100644 index 0000000..770874d --- /dev/null +++ b/src/main/resources/db/migration/V7__add_view_count_to_posts.sql @@ -0,0 +1 @@ +ALTER TABLE posts ADD COLUMN view_count INT NOT NULL DEFAULT 0; diff --git a/src/test/java/com/daramg/server/post/presentation/PostQueryControllerTest.java b/src/test/java/com/daramg/server/post/presentation/PostQueryControllerTest.java index c478b2b..6d2dd67 100644 --- a/src/test/java/com/daramg/server/post/presentation/PostQueryControllerTest.java +++ b/src/test/java/com/daramg/server/post/presentation/PostQueryControllerTest.java @@ -664,6 +664,7 @@ public class PostQueryControllerTest extends ControllerTestSupport { PostStatus.PUBLISHED, 10, 5, + 0, false, createdAt, updatedAt, @@ -704,6 +705,7 @@ public class PostQueryControllerTest extends ControllerTestSupport { fieldWithPath("postStatus").type(JsonFieldType.STRING).description("포스트 상태 (PUBLISHED, DRAFT)"), fieldWithPath("likeCount").type(JsonFieldType.NUMBER).description("좋아요 개수"), fieldWithPath("commentCount").type(JsonFieldType.NUMBER).description("댓글 개수"), + fieldWithPath("viewCount").type(JsonFieldType.NUMBER).description("조회수"), fieldWithPath("isBlocked").type(JsonFieldType.BOOLEAN).description("포스트 블락 여부"), fieldWithPath("createdAt").type(JsonFieldType.STRING).description("생성일시 (ISO 8601 형식)"), fieldWithPath("updatedAt").type(JsonFieldType.STRING).description("수정일시 (ISO 8601 형식)"),