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)