From 5b9fdacde17ddf5052026b74ba9851f192f20535 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 8 Jun 2026 22:18:02 +0900 Subject: [PATCH] =?UTF-8?q?feat(ranking):=20=ED=81=AC=EB=A6=AC=EC=97=90?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=9E=AD=ED=82=B9=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=A0=80=EC=9E=A5=EC=86=8C=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DefaultCreatorRankingBlockRepository.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/v2/ranking/adapter/out/persistence/DefaultCreatorRankingBlockRepository.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/ranking/adapter/out/persistence/DefaultCreatorRankingBlockRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/ranking/adapter/out/persistence/DefaultCreatorRankingBlockRepository.kt new file mode 100644 index 00000000..1f297a09 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/ranking/adapter/out/persistence/DefaultCreatorRankingBlockRepository.kt @@ -0,0 +1,40 @@ +package kr.co.vividnext.sodalive.v2.ranking.adapter.out.persistence + +import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.member.block.QBlockMember +import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingBlockPort +import org.springframework.stereotype.Repository + +@Repository +class DefaultCreatorRankingBlockRepository( + private val queryFactory: JPAQueryFactory +) : CreatorRankingBlockPort { + override fun findBlockedCreatorIds(memberId: Long, creatorIds: Collection): Set { + if (creatorIds.isEmpty()) { + return emptySet() + } + + val viewerBlock = QBlockMember("creatorRankingViewerBlock") + val creatorBlock = QBlockMember("creatorRankingCreatorBlock") + val blockedByViewer = queryFactory + .select(viewerBlock.blockedMember.id) + .from(viewerBlock) + .where( + viewerBlock.member.id.eq(memberId) + .and(viewerBlock.blockedMember.id.`in`(creatorIds)) + .and(viewerBlock.isActive.isTrue) + ) + .fetch() + val blockedByCreator = queryFactory + .select(creatorBlock.member.id) + .from(creatorBlock) + .where( + creatorBlock.member.id.`in`(creatorIds) + .and(creatorBlock.blockedMember.id.eq(memberId)) + .and(creatorBlock.isActive.isTrue) + ) + .fetch() + + return (blockedByViewer + blockedByCreator).toSet() + } +}