diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/comment/AudioContentCommentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/comment/AudioContentCommentService.kt index fb6f527..8f25068 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/comment/AudioContentCommentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/comment/AudioContentCommentService.kt @@ -67,18 +67,19 @@ class AudioContentCommentService( val audioContentComment = repository.findByIdOrNull(request.commentId) ?: throw SodaException("잘못된 접근 입니다.\n확인 후 다시 시도해 주세요.") - if (audioContentComment.audioContent!!.member!!.id!! != member.id!!) { - if (audioContentComment.member == null || audioContentComment.member!!.id!! != member.id!!) { - throw SodaException("잘못된 접근 입니다.\n확인 후 다시 시도해 주세요.") - } - + if (audioContentComment.member!!.id!! == member.id!!) { if (request.comment != null) { audioContentComment.comment = request.comment } } - if (request.isActive != null) { - audioContentComment.isActive = request.isActive + if ( + audioContentComment.member!!.id!! == member.id!! || + audioContentComment.audioContent!!.member!!.id!! != member.id!! + ) { + if (request.isActive != null) { + audioContentComment.isActive = request.isActive + } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/GetAudioContentOrderListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/GetAudioContentOrderListResponse.kt index c762fae..52e72d9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/GetAudioContentOrderListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/GetAudioContentOrderListResponse.kt @@ -10,6 +10,7 @@ data class GetAudioContentOrderListResponse( data class GetAudioContentOrderListItem @QueryProjection constructor( val contentId: Long, val coverImageUrl: String, + val creatorNickname: String, val title: String, val themeStr: String, val duration: String?, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt index e0ee93f..44bbfbd 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt @@ -126,6 +126,7 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde QGetAudioContentOrderListItem( audioContent.id, audioContent.coverImage.prepend("/").prepend(coverImageHost), + audioContent.member.nickname, audioContent.title, audioContent.theme.theme, audioContent.duration, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt index 5783c1f..208465c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt @@ -451,6 +451,7 @@ class ExplorerQueryRepository( GetCheersResponseItem( cheersId = it.id!!, + memberId = it.member!!.id!!, nickname = it.member!!.nickname, profileUrl = if (it.member!!.profileImage != null) { "$cloudFrontHost/${it.member!!.profileImage}" @@ -467,6 +468,7 @@ class ExplorerQueryRepository( GetCheersResponseItem( cheersId = cheers.id!!, + memberId = cheers.member!!.id!!, nickname = cheers.member!!.nickname, profileUrl = if (cheers.member!!.profileImage != null) { "$cloudFrontHost/${cheers.member!!.profileImage}" @@ -593,13 +595,10 @@ class ExplorerQueryRepository( .fetchFirst() } - fun getCheers(cheersId: Long, memberId: Long): CreatorCheers? { + fun getCheers(cheersId: Long): CreatorCheers? { return queryFactory .selectFrom(creatorCheers) - .where( - creatorCheers.id.eq(cheersId) - .and(creatorCheers.member.id.eq(memberId)) - ) + .where(creatorCheers.id.eq(cheersId)) .fetchFirst() } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt index d64d4df..4738f03 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt @@ -368,10 +368,23 @@ class ExplorerService( @Transactional fun modifyCheers(request: PutWriteCheersRequest, member: Member) { - val cheers = queryRepository.getCheers(request.cheersId, member.id!!) + val cheers = queryRepository.getCheers(request.cheersId) ?: throw SodaException("잘못된 요청입니다.") - cheers.cheers = request.content + if (cheers.member!!.id!! == member.id!!) { + if (request.content != null) { + cheers.cheers = request.content + } + } + + if ( + cheers.creator!!.id!! == member.id!! || + cheers.member!!.id!! == member.id!! + ) { + if (request.isActive != null) { + cheers.isActive = request.isActive + } + } } @Transactional diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCheersResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCheersResponse.kt index 142f1b2..5465295 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCheersResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCheersResponse.kt @@ -7,6 +7,7 @@ data class GetCheersResponse( data class GetCheersResponseItem( val cheersId: Long, + val memberId: Long, val nickname: String, val profileUrl: String, val content: String, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/CreatorCheers.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/CreatorCheers.kt index 56aee2e..a7d7e54 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/CreatorCheers.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/CreatorCheers.kt @@ -13,7 +13,7 @@ import javax.persistence.OneToMany data class CreatorCheers( @Column(columnDefinition = "TEXT", nullable = false) var cheers: String, - val isActive: Boolean = true + var isActive: Boolean = true ) : BaseEntity() { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id", nullable = true) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/PutWriteCheersRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/PutWriteCheersRequest.kt index ebb7209..9be151f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/PutWriteCheersRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/PutWriteCheersRequest.kt @@ -2,5 +2,6 @@ package kr.co.vividnext.sodalive.explorer.profile data class PutWriteCheersRequest( val cheersId: Long, - val content: String + val content: String? = null, + val isActive: Boolean? = null ) 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 bd8d174..243ecee 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/fcm/FcmEvent.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.fcm import kr.co.vividnext.sodalive.content.comment.AudioContentCommentRepository import kr.co.vividnext.sodalive.member.MemberRepository +import org.slf4j.LoggerFactory import org.springframework.scheduling.annotation.Async import org.springframework.stereotype.Component import org.springframework.transaction.annotation.Propagation @@ -34,6 +35,8 @@ class FcmSendListener( private val memberRepository: MemberRepository, private val contentCommentRepository: AudioContentCommentRepository ) { + private val logger = LoggerFactory.getLogger(this::class.java) + @Async @TransactionalEventListener @Transactional(propagation = Propagation.REQUIRES_NEW) @@ -117,10 +120,12 @@ class FcmSendListener( if (fcmEvent.container.isNotBlank()) { val pushTokens = memberRepository.getStartLiveRoomNotificationRecipientPushTokens( creatorId = fcmEvent.creatorId!!, + roomId = fcmEvent.roomId!!, isAuth = fcmEvent.isAuth, container = fcmEvent.container ) + logger.info("토큰 - $pushTokens") for (tokens in pushTokens) { pushService.send( tokens = tokens, 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 528abc9..e79a7e0 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 @@ -250,7 +250,7 @@ class LiveRoomService( message = if (createdRoom.channelName != null) { "라이브를 시작했습니다. - ${createdRoom.title}" } else { - "라이브를 개설했습니다. - ${createdRoom.title}" + "라이브를 예약했습니다. - ${createdRoom.title}" }, isAuth = createdRoom.isAdult, roomId = createdRoom.id, @@ -266,7 +266,7 @@ class LiveRoomService( message = if (createdRoom.channelName != null) { "라이브를 시작했습니다. - ${createdRoom.title}" } else { - "라이브를 개설했습니다. - ${createdRoom.title}" + "라이브를 예약했습니다. - ${createdRoom.title}" }, isAuth = createdRoom.isAdult, roomId = createdRoom.id, 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 806240e..2d4d4cf 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberRepository.kt @@ -34,6 +34,7 @@ interface MemberQueryRepository { fun getStartLiveRoomNotificationRecipientPushTokens( creatorId: Long, + roomId: Long, isAuth: Boolean, container: String ): List> @@ -146,12 +147,10 @@ class MemberQueryRepositoryImpl( override fun getStartLiveRoomNotificationRecipientPushTokens( creatorId: Long, + roomId: 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) @@ -165,26 +164,21 @@ class MemberQueryRepositoryImpl( .and(creatorFollowing.member.pushToken.isNotNull) if (isAuth) { - where = where.and(member.auth.isNotNull) + where = where.and(creatorFollowing.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.room.id.eq(roomId)) .and( liveReservation.member.id.notIn( blockMemberRepository.getBlockedMemberList(creatorId) @@ -192,21 +186,18 @@ class MemberQueryRepositoryImpl( ) if (isAuth) { - where = where.and(member.auth.isNotNull) + where = where.and(liveReservation.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() + + return (followingMemberPushToken + reservationMemberPushToken) .toSet() .chunked(500) - - return followingMemberPushToken + reservationMemberPushToken } override fun getUploadContentNotificationRecipientPushTokens(