From e8d8249a8ffceabf2c81a481a22f6a010c6c561d Mon Sep 17 00:00:00 2001 From: Jimin Lim <50178026+jimin3263@users.noreply.github.com> Date: Sun, 27 Oct 2024 21:20:01 +0900 Subject: [PATCH] =?UTF-8?q?[fix=20#169]=20=EB=B6=81=EB=A7=88=ED=81=AC=20?= =?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=8C=85=20=EC=8B=9C=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=EB=90=9C=20=EC=BB=A8=ED=85=90=EC=B8=A0=EB=8A=94=20=EB=B9=BC?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20(#171)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 컨텐츠 삭제 전 북마크 취소 * fix: 북마크 카운팅 시 삭제된 컨텐츠는 빼도록 --- .../bookmark/persist/BookMarkRepository.kt | 2 +- .../persist/BookmarkQuerydslRepository.kt | 5 ++++ .../persist/BookmarkQuerydslRepositoryImpl.kt | 28 +++++++++++++++++++ .../content/impl/ContentCountAdapter.kt | 4 +-- .../content/port/out/ContentCountPort.kt | 2 +- .../content/port/service/ContentService.kt | 2 +- 6 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepository.kt create mode 100644 adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepositoryImpl.kt diff --git a/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookMarkRepository.kt b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookMarkRepository.kt index b78660ad..15fec4f3 100644 --- a/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookMarkRepository.kt +++ b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookMarkRepository.kt @@ -4,7 +4,7 @@ import org.springframework.data.domain.Pageable import org.springframework.data.domain.Slice import org.springframework.data.jpa.repository.JpaRepository -interface BookMarkRepository : JpaRepository { +interface BookMarkRepository : JpaRepository, BookmarkQuerydslRepository { fun findByContentIdAndUserIdAndDeleted( contentId: Long, userId: Long, diff --git a/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepository.kt b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepository.kt new file mode 100644 index 00000000..434dfb2b --- /dev/null +++ b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepository.kt @@ -0,0 +1,5 @@ +package com.pokit.out.persistence.bookmark.persist + +interface BookmarkQuerydslRepository { + fun countByUserId(userId: Long): Int +} diff --git a/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepositoryImpl.kt b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepositoryImpl.kt new file mode 100644 index 00000000..394e8748 --- /dev/null +++ b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/bookmark/persist/BookmarkQuerydslRepositoryImpl.kt @@ -0,0 +1,28 @@ +package com.pokit.out.persistence.bookmark.persist + +import com.pokit.out.persistence.bookmark.persist.QBookmarkEntity.bookmarkEntity +import com.pokit.out.persistence.content.persist.QContentEntity.contentEntity +import com.querydsl.jpa.impl.JPAQueryFactory +import org.springframework.stereotype.Repository + +@Repository +class BookmarkQuerydslRepositoryImpl( + private val queryFactory: JPAQueryFactory +) : BookmarkQuerydslRepository { + override fun countByUserId(userId: Long): Int { + return (queryFactory + .select(bookmarkEntity.id.countDistinct()) + .from(bookmarkEntity) + .join(contentEntity) + .on( + bookmarkEntity.contentId.eq(contentEntity.id), + contentEntity.deleted.isFalse, + ) + .where( + bookmarkEntity.userId.eq(userId), + bookmarkEntity.deleted.isFalse, + ) + .fetchOne() ?: 0L).toInt() + } + +} diff --git a/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/content/impl/ContentCountAdapter.kt b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/content/impl/ContentCountAdapter.kt index c4ae02ca..21da4575 100644 --- a/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/content/impl/ContentCountAdapter.kt +++ b/adapters/out-persistence/src/main/kotlin/com/pokit/out/persistence/content/impl/ContentCountAdapter.kt @@ -27,6 +27,6 @@ class ContentCountAdapter( .fetchFirst()!!.toInt() } - override fun getBookmarkContent(userId: Long) = - bookMarkRepository.countByUserIdAndDeleted(userId, false) + override fun getBookmarkCount(userId: Long): Int = + bookMarkRepository.countByUserId(userId) } diff --git a/application/src/main/kotlin/com/pokit/content/port/out/ContentCountPort.kt b/application/src/main/kotlin/com/pokit/content/port/out/ContentCountPort.kt index 14c72984..73b72704 100644 --- a/application/src/main/kotlin/com/pokit/content/port/out/ContentCountPort.kt +++ b/application/src/main/kotlin/com/pokit/content/port/out/ContentCountPort.kt @@ -3,5 +3,5 @@ package com.pokit.content.port.out interface ContentCountPort { fun getUnreadCount(userId: Long): Int - fun getBookmarkContent(userId: Long): Int + fun getBookmarkCount(userId: Long): Int } diff --git a/application/src/main/kotlin/com/pokit/content/port/service/ContentService.kt b/application/src/main/kotlin/com/pokit/content/port/service/ContentService.kt index fd4c2c58..af6088f7 100644 --- a/application/src/main/kotlin/com/pokit/content/port/service/ContentService.kt +++ b/application/src/main/kotlin/com/pokit/content/port/service/ContentService.kt @@ -162,7 +162,7 @@ class ContentService( contentCountPort.getUnreadCount(userId) override fun getBookmarkCount(userId: Long) = - contentCountPort.getBookmarkContent(userId) + contentCountPort.getBookmarkCount(userId) private fun verifyContent(userId: Long, contentId: Long): Content { return contentPort.loadByUserIdAndId(userId, contentId)