From e9723d37bad183dc4a77d454bd2d61f3326a64ad Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 9 Aug 2023 06:54:25 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B0=A8=EB=8B=A8=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=EB=A7=81=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../live/recommend/LiveRecommendRepository.kt | 7 ++++++- .../live/recommend/LiveRecommendService.kt | 15 ++++++++++++--- .../sodalive/live/room/LiveRoomService.kt | 14 +++++++++++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt index 7895ea5..7f12513 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt @@ -44,6 +44,7 @@ class LiveRecommendRepository( fun getOnAirRecommendChannelList( memberId: Long, + isBlocked: (Long) -> Boolean, isAdult: Boolean ): List { var where = member.role.eq(MemberRole.CREATOR) @@ -75,12 +76,16 @@ class LiveRecommendRepository( .orderBy(Expressions.numberTemplate(Double::class.java, "function('rand')").asc()) .limit(20) .fetch() + .asSequence() + .filter { !isBlocked(it.creatorId) } + .toList() } fun getRecommendChannelList( memberId: Long, withOutCreatorList: List, - limit: Long + limit: Long, + isBlocked: (Long) -> Boolean ): List { val where = member.role.eq(MemberRole.CREATOR) .and(member.isActive.isTrue) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt index 9b400ae..5ffe915 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt @@ -1,10 +1,14 @@ package kr.co.vividnext.sodalive.live.recommend import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.member.block.BlockMemberRepository import org.springframework.stereotype.Service @Service -class LiveRecommendService(private val repository: LiveRecommendRepository) { +class LiveRecommendService( + private val repository: LiveRecommendRepository, + private val blockMemberRepository: BlockMemberRepository +) { fun getRecommendLive(member: Member): List { return repository.getRecommendLive( @@ -14,7 +18,11 @@ class LiveRecommendService(private val repository: LiveRecommendRepository) { } fun getRecommendChannelList(member: Member): List { - val onAirChannelList = repository.getOnAirRecommendChannelList(member.id!!, isAdult = member.auth != null) + val onAirChannelList = repository.getOnAirRecommendChannelList( + member.id!!, + isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }, + isAdult = member.auth != null + ) if (onAirChannelList.size >= 20) { return onAirChannelList @@ -27,7 +35,8 @@ class LiveRecommendService(private val repository: LiveRecommendRepository) { val notOnAirCreatorList = repository.getRecommendChannelList( member.id!!, withOutCreatorList = onAirCreatorIdList, - limit = (20 - onAirChannelList.size).toLong() + limit = (20 - onAirChannelList.size).toLong(), + isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) } ) return onAirChannelList + notOnAirCreatorList diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index 50d6a21..4de90c2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -115,9 +115,13 @@ class LiveRoomService( isAdult = member.auth != null ) .asSequence() + .filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) } .map { val roomInfo = roomInfoRepository.findByIdOrNull(it.id!!) + val reservations = it.reservations + .filter { reservation -> reservation.member!!.id!! == member.id!! && reservation.isActive } + val beginDateTime = it.beginDateTime .atZone(ZoneId.of("UTC")) .withZoneSameInstant(ZoneId.of(timezone)) @@ -138,13 +142,17 @@ class LiveRoomService( channelName = it.channelName, managerNickname = it.member!!.nickname, managerId = it.member!!.id!!, - tags = listOf(), + tags = it.tags + .asSequence() + .filter { tag -> tag.tag.isActive } + .map { tag -> tag.tag.tag } + .toList(), coverImageUrl = if (it.coverImage!!.startsWith("https://")) { it.coverImage!! } else { "$cloudFrontHost/${it.coverImage!!}" }, - isReservation = false, + isReservation = reservations.isNotEmpty(), isPrivateRoom = it.type == LiveRoomType.PRIVATE ) } @@ -742,7 +750,7 @@ class LiveRoomService( isSpeaker = isSpeaker, isManager = isManager, isFollowing = isFollowing, - isBlock = false + isBlock = blockMemberRepository.isBlocked(blockedMemberId = userResponse.id, memberId = memberResponse.id) ) }