푸시메시지 기능 추가 - 전체, 개별, 라이브 생성, 라이브 시작, 메시지 전송, 콘텐츠 업로드
This commit is contained in:
@@ -1,7 +1,14 @@
|
||||
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.member.QMember.member
|
||||
import kr.co.vividnext.sodalive.member.auth.QAuth.auth
|
||||
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
||||
import kr.co.vividnext.sodalive.member.following.QCreatorFollowing.creatorFollowing
|
||||
import kr.co.vividnext.sodalive.member.notification.QMemberNotification.memberNotification
|
||||
import kr.co.vividnext.sodalive.message.QMessage.message
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
|
||||
@@ -15,10 +22,28 @@ interface MemberQueryRepository {
|
||||
fun findByPushToken(pushToken: String): List<Member>
|
||||
fun findByNicknameAndOtherCondition(nickname: String, memberId: Long): List<Member>
|
||||
fun findCreatorByIdOrNull(memberId: Long): Member?
|
||||
fun getAllRecipientPushTokens(isAuth: Boolean, container: String): List<List<String>>
|
||||
fun getCreateLiveRoomNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean,
|
||||
container: String
|
||||
): List<List<String>>
|
||||
|
||||
fun getUploadContentNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean,
|
||||
container: String
|
||||
): List<List<String>>
|
||||
|
||||
fun getMessageRecipientPushToken(messageId: Long): GetMessageRecipientPushTokenResponse
|
||||
fun getIndividualRecipientPushTokens(recipients: List<Long>, isAuth: Boolean): Map<String, List<List<String>>>
|
||||
}
|
||||
|
||||
@Repository
|
||||
class MemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : MemberQueryRepository {
|
||||
class MemberQueryRepositoryImpl(
|
||||
private val queryFactory: JPAQueryFactory,
|
||||
private val blockMemberRepository: BlockMemberRepository
|
||||
) : MemberQueryRepository {
|
||||
override fun findByPushToken(pushToken: String): List<Member> {
|
||||
return queryFactory
|
||||
.selectFrom(member)
|
||||
@@ -47,4 +72,141 @@ class MemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Mem
|
||||
)
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun getAllRecipientPushTokens(isAuth: Boolean, container: String): List<List<String>> {
|
||||
var where = member.isActive.isTrue
|
||||
.and(member.email.notIn("admin@sodalive.net"))
|
||||
.and(member.container.eq(container))
|
||||
|
||||
if (isAuth) {
|
||||
where = where.and(member.auth.isNotNull)
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
.select(member.pushToken)
|
||||
.from(member)
|
||||
.leftJoin(member.auth, auth)
|
||||
.where(where)
|
||||
.fetch()
|
||||
.toSet()
|
||||
.chunked(500)
|
||||
}
|
||||
|
||||
override fun getCreateLiveRoomNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean,
|
||||
container: String
|
||||
): List<List<String>> {
|
||||
val member = QMember.member
|
||||
val creator = QMember.member
|
||||
|
||||
var where = creatorFollowing.isActive.isTrue
|
||||
.and(creator.id.eq(creatorId))
|
||||
.and(member.email.notIn("admin@sodalive.net"))
|
||||
.and(member.container.eq(container))
|
||||
.and(memberNotification.live.isTrue)
|
||||
.and(
|
||||
member.id.notIn(
|
||||
blockMemberRepository.getBlockedMemberList(creatorId)
|
||||
)
|
||||
)
|
||||
|
||||
if (isAuth) {
|
||||
where = where.and(member.auth.isNotNull)
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
.select(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)
|
||||
}
|
||||
|
||||
override fun getUploadContentNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean,
|
||||
container: String
|
||||
): List<List<String>> {
|
||||
val member = QMember.member
|
||||
val creator = QMember.member
|
||||
|
||||
var where = creatorFollowing.isActive.isTrue
|
||||
.and(creator.id.eq(creatorId))
|
||||
.and(member.email.notIn("admin@sodalive.net"))
|
||||
.and(member.container.eq(container))
|
||||
.and(memberNotification.uploadContent.isTrue)
|
||||
.and(
|
||||
member.id.notIn(
|
||||
blockMemberRepository.getBlockedMemberList(creatorId)
|
||||
)
|
||||
)
|
||||
|
||||
if (isAuth) {
|
||||
where = where.and(member.auth.isNotNull)
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
.select(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)
|
||||
}
|
||||
|
||||
override fun getMessageRecipientPushToken(messageId: Long): GetMessageRecipientPushTokenResponse {
|
||||
return queryFactory
|
||||
.select(
|
||||
QGetMessageRecipientPushTokenResponse(
|
||||
member.pushToken,
|
||||
member.container
|
||||
)
|
||||
)
|
||||
.from(message)
|
||||
.innerJoin(message.recipient, member)
|
||||
.where(message.id.eq(messageId))
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun getIndividualRecipientPushTokens(
|
||||
recipients: List<Long>,
|
||||
isAuth: Boolean
|
||||
): Map<String, List<List<String>>> {
|
||||
var where = member.isActive.isTrue
|
||||
.and(member.email.notIn("admin@sodalive.net"))
|
||||
|
||||
if (isAuth) {
|
||||
where = where.and(member.auth.isNotNull)
|
||||
}
|
||||
|
||||
val aosPushTokens = queryFactory
|
||||
.select(member.pushToken)
|
||||
.from(member)
|
||||
.leftJoin(member.auth, auth)
|
||||
.where(where.and(member.container.eq("aos")))
|
||||
.fetch()
|
||||
.toSet()
|
||||
.chunked(500)
|
||||
|
||||
val iosPushTokens = queryFactory
|
||||
.select(member.pushToken)
|
||||
.from(member)
|
||||
.leftJoin(member.auth, auth)
|
||||
.where(where.and(member.container.eq("ios")))
|
||||
.fetch()
|
||||
.toSet()
|
||||
.chunked(500)
|
||||
|
||||
return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens)
|
||||
}
|
||||
}
|
||||
|
@@ -11,6 +11,7 @@ interface BlockMemberRepository : JpaRepository<BlockMember, Long>, BlockMemberQ
|
||||
interface BlockMemberQueryRepository {
|
||||
fun getBlockAccount(blockedMemberId: Long, memberId: Long): BlockMember?
|
||||
fun isBlocked(blockedMemberId: Long, memberId: Long): Boolean
|
||||
fun getBlockedMemberList(creatorId: Long): List<Long>
|
||||
}
|
||||
|
||||
@Repository
|
||||
@@ -39,4 +40,15 @@ class BlockMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory)
|
||||
|
||||
return blockedAccount != null
|
||||
}
|
||||
|
||||
override fun getBlockedMemberList(creatorId: Long): List<Long> {
|
||||
return queryFactory
|
||||
.select(blockMember.blockedMemberId)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.memberId.eq(creatorId)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
)
|
||||
.fetch()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user