From d6dfa63beae5ca30a3e98f6a76fc000a40a9c86f Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 1 Sep 2023 16:46:43 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20=ED=91=B8=EC=8B=9C=20=EB=B0=9C=EC=86=A1=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/fcm/FcmEvent.kt | 34 ++++++++++++++++++- .../sodalive/live/room/LiveRoomService.kt | 9 +++++ .../sodalive/member/MemberRepository.kt | 34 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) 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 e766c32..ad25846 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt @@ -9,7 +9,8 @@ import org.springframework.transaction.annotation.Transactional import org.springframework.transaction.event.TransactionalEventListener enum class FcmEventType { - ALL, INDIVIDUAL, CREATE_LIVE, START_LIVE, UPLOAD_CONTENT, SEND_MESSAGE, CHANGE_NOTICE, CREATE_CONTENT_COMMENT + ALL, INDIVIDUAL, CREATE_LIVE, START_LIVE, CANCEL_LIVE, UPLOAD_CONTENT, SEND_MESSAGE, CHANGE_NOTICE, + CREATE_CONTENT_COMMENT } class FcmEvent( @@ -131,6 +132,37 @@ class FcmSendListener( } } + FcmEventType.CANCEL_LIVE -> { + if (fcmEvent.roomId != null) { + val pushTokenList = memberRepository.getPushTokenFromReservationList(fcmEvent.roomId) + + val iosPushTokens = pushTokenList["ios"] + val aosPushToken = pushTokenList["aos"] + + if (iosPushTokens != null) { + for (tokens in iosPushTokens) { + pushService.send( + tokens = tokens, + title = fcmEvent.title, + message = fcmEvent.message, + container = "ios" + ) + } + } + + if (aosPushToken != null) { + for (tokens in aosPushToken) { + pushService.send( + tokens = tokens, + title = fcmEvent.title, + message = fcmEvent.message, + container = "aos" + ) + } + } + } + } + FcmEventType.UPLOAD_CONTENT -> { if (fcmEvent.container.isNotBlank()) { val pushTokens = memberRepository.getUploadContentNotificationRecipientPushTokens( 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 b470dd1..647377a 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 @@ -475,6 +475,15 @@ class LiveRoomService( } reservationRepository.cancelReservation(roomId = room.id!!) + + applicationEventPublisher.publishEvent( + FcmEvent( + type = FcmEventType.CANCEL_LIVE, + title = room.member!!.nickname, + message = "라이브 취소 : ${room.title}", + roomId = request.roomId + ) + ) } @Transactional 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 3a60039..6d8c0cf 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt @@ -50,6 +50,7 @@ interface MemberQueryRepository { fun getMemberByEmail(email: String): Member? fun getChangeNoticeRecipientPushTokens(creatorId: Long): Map>> + fun getPushTokenFromReservationList(roomId: Long): Map>> } @Repository @@ -255,9 +256,11 @@ class MemberQueryRepositoryImpl( ) .from(message) .innerJoin(message.recipient, member) + .innerJoin(member.notification, memberNotification) .where( message.id.eq(messageId) .and(member.pushToken.isNotNull) + .and(memberNotification.message.isTrue) ) .fetchFirst() } @@ -356,4 +359,35 @@ class MemberQueryRepositoryImpl( return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens) } + + override fun getPushTokenFromReservationList(roomId: Long): Map>> { + val query = queryFactory + .select(liveReservation.member.pushToken) + .from(liveReservation) + .innerJoin(liveReservation.room, liveRoom) + .innerJoin(liveReservation.member, member) + + val where = liveRoom.id.eq(roomId) + .and(liveReservation.isActive.isTrue) + + val aosPushTokens = query + .where( + where + .and(member.container.eq("aos")) + ) + .fetch() + .toSet() + .chunked(500) + + val iosPushTokens = query + .where( + where + .and(member.container.eq("ios")) + ) + .fetch() + .toSet() + .chunked(500) + + return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens) + } }