diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt b/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt index 295e592..e766c32 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt @@ -113,7 +113,7 @@ class FcmSendListener( FcmEventType.START_LIVE -> { if (fcmEvent.container.isNotBlank()) { - val pushTokens = memberRepository.getCreateLiveRoomNotificationRecipientPushTokens( + val pushTokens = memberRepository.getStartLiveRoomNotificationRecipientPushTokens( creatorId = fcmEvent.creatorId!!, isAuth = fcmEvent.isAuth, container = fcmEvent.container diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt index b846bac..3a60039 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt @@ -3,6 +3,8 @@ package kr.co.vividnext.sodalive.member import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.fcm.GetMessageRecipientPushTokenResponse import kr.co.vividnext.sodalive.fcm.QGetMessageRecipientPushTokenResponse +import kr.co.vividnext.sodalive.live.reservation.QLiveReservation.liveReservation +import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom import kr.co.vividnext.sodalive.member.QMember.member import kr.co.vividnext.sodalive.member.auth.QAuth.auth import kr.co.vividnext.sodalive.member.block.BlockMemberRepository @@ -30,6 +32,12 @@ interface MemberQueryRepository { container: String ): List> + fun getStartLiveRoomNotificationRecipientPushTokens( + creatorId: Long, + isAuth: Boolean, + container: String + ): List> + fun getUploadContentNotificationRecipientPushTokens( creatorId: Long, isAuth: Boolean, @@ -135,6 +143,71 @@ class MemberQueryRepositoryImpl( .chunked(500) } + override fun getStartLiveRoomNotificationRecipientPushTokens( + creatorId: Long, + isAuth: Boolean, + container: String + ): List> { + val member = QMember.member + val creator = QMember.member + + var where = creatorFollowing.isActive.isTrue + .and(creatorFollowing.creator.id.eq(creatorId)) + .and(creatorFollowing.member.notification.live.isTrue) + .and(creatorFollowing.member.container.eq(container)) + .and(creatorFollowing.member.email.notIn("admin@sodalive.net")) + .and( + creatorFollowing.member.id.notIn( + blockMemberRepository.getBlockedMemberList(creatorId) + ) + ) + .and(creatorFollowing.member.pushToken.isNotNull) + + if (isAuth) { + where = where.and(member.auth.isNotNull) + } + + val followingMemberPushToken = queryFactory + .select(creatorFollowing.member.pushToken) + .from(creatorFollowing) + .innerJoin(creatorFollowing.creator, creator) + .innerJoin(creatorFollowing.member, member) + .innerJoin(member.notification, memberNotification) + .leftJoin(member.auth, auth) + .where(where) + .fetch() + .toSet() + .chunked(500) + + where = liveReservation.isActive.isTrue + .and(liveReservation.member.notification.live.isTrue) + .and(liveReservation.member.container.eq(container)) + .and(liveReservation.member.email.notIn("admin@sodalive.net")) + .and(liveReservation.member.pushToken.isNotNull) + .and( + liveReservation.member.id.notIn( + blockMemberRepository.getBlockedMemberList(creatorId) + ) + ) + + if (isAuth) { + where = where.and(member.auth.isNotNull) + } + + val reservationMemberPushToken = queryFactory + .select(liveReservation.member.pushToken) + .from(liveReservation) + .innerJoin(liveReservation.member, member) + .innerJoin(liveReservation.room, liveRoom) + .innerJoin(liveRoom.member, creator) + .where(where) + .fetch() + .toSet() + .chunked(500) + + return followingMemberPushToken + reservationMemberPushToken + } + override fun getUploadContentNotificationRecipientPushTokens( creatorId: Long, isAuth: Boolean, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt index 743d2c2..42e33c2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt @@ -349,6 +349,7 @@ class MemberService( } } + @Transactional fun memberBlock(request: MemberBlockRequest, memberId: Long) { var blockMember = blockMemberRepository.getBlockAccount( blockedMemberId = request.blockMemberId, @@ -367,6 +368,7 @@ class MemberService( } } + @Transactional fun memberUnBlock(request: MemberBlockRequest, memberId: Long) { val blockMember = blockMemberRepository.getBlockAccount( blockedMemberId = request.blockMemberId,