test #384
@@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.fcm
|
||||
import kr.co.vividnext.sodalive.content.comment.AudioContentCommentRepository
|
||||
import kr.co.vividnext.sodalive.i18n.Lang
|
||||
import kr.co.vividnext.sodalive.i18n.SodaMessageSource
|
||||
import kr.co.vividnext.sodalive.live.room.GenderRestriction
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import org.springframework.scheduling.annotation.Async
|
||||
import org.springframework.stereotype.Component
|
||||
@@ -33,7 +34,8 @@ class FcmEvent(
|
||||
val auditionId: Long? = null,
|
||||
val commentParentId: Long? = null,
|
||||
val myMemberId: Long? = null,
|
||||
val isAvailableJoinCreator: Boolean? = null
|
||||
val isAvailableJoinCreator: Boolean? = null,
|
||||
val genderRestriction: GenderRestriction? = null
|
||||
)
|
||||
|
||||
@Component
|
||||
@@ -69,7 +71,8 @@ class FcmSendListener(
|
||||
val pushTokens = memberRepository.getCreateLiveRoomNotificationRecipientPushTokens(
|
||||
creatorId = fcmEvent.creatorId!!,
|
||||
isAuth = fcmEvent.isAuth ?: false,
|
||||
isAvailableJoinCreator = fcmEvent.isAvailableJoinCreator ?: false
|
||||
isAvailableJoinCreator = fcmEvent.isAvailableJoinCreator ?: false,
|
||||
genderRestriction = fcmEvent.genderRestriction
|
||||
)
|
||||
sendPush(pushTokens, fcmEvent, roomId = fcmEvent.roomId)
|
||||
}
|
||||
@@ -79,7 +82,8 @@ class FcmSendListener(
|
||||
creatorId = fcmEvent.creatorId!!,
|
||||
roomId = fcmEvent.roomId!!,
|
||||
isAuth = fcmEvent.isAuth ?: false,
|
||||
isAvailableJoinCreator = fcmEvent.isAvailableJoinCreator ?: false
|
||||
isAvailableJoinCreator = fcmEvent.isAvailableJoinCreator ?: false,
|
||||
genderRestriction = fcmEvent.genderRestriction
|
||||
)
|
||||
sendPush(pushTokens, fcmEvent, roomId = fcmEvent.roomId)
|
||||
}
|
||||
|
||||
@@ -1448,6 +1448,11 @@ class SodaMessageSource {
|
||||
)
|
||||
|
||||
private val liveRoomMessages = mapOf(
|
||||
"live.room.gender_restricted" to mapOf(
|
||||
Lang.KO to "입장 가능한 성별이 아닙니다.",
|
||||
Lang.EN to "Your gender is not allowed to enter this room.",
|
||||
Lang.JA to "入場可能な性別ではありません。"
|
||||
),
|
||||
"live.room.max_reservations" to mapOf(
|
||||
Lang.KO to "예약 라이브는 최대 3개까지 가능합니다.",
|
||||
Lang.EN to "You can reserve up to 3 live sessions.",
|
||||
|
||||
@@ -15,5 +15,6 @@ data class CreateLiveRoomRequest(
|
||||
val menuPanId: Long = 0,
|
||||
val menuPan: String = "",
|
||||
val isActiveMenuPan: Boolean = false,
|
||||
val isAvailableJoinCreator: Boolean = true
|
||||
val isAvailableJoinCreator: Boolean = true,
|
||||
val genderRestriction: GenderRestriction = GenderRestriction.ALL
|
||||
)
|
||||
|
||||
@@ -9,5 +9,6 @@ data class EditLiveRoomInfoRequest(
|
||||
val menuPanId: Long = 0,
|
||||
val menuPan: String = "",
|
||||
val isActiveMenuPan: Boolean? = null,
|
||||
val isAdult: Boolean? = null
|
||||
val isAdult: Boolean? = null,
|
||||
val genderRestriction: GenderRestriction? = null
|
||||
)
|
||||
|
||||
@@ -32,7 +32,9 @@ data class LiveRoom(
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
val type: LiveRoomType = LiveRoomType.OPEN,
|
||||
@Column(nullable = true)
|
||||
var password: String? = null
|
||||
var password: String? = null,
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
var genderRestriction: GenderRestriction = GenderRestriction.ALL
|
||||
) : BaseEntity() {
|
||||
@OneToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "member_id", nullable = false)
|
||||
@@ -67,3 +69,7 @@ enum class LiveRoomType {
|
||||
enum class LiveRoomStatus {
|
||||
NOW, RESERVATION
|
||||
}
|
||||
|
||||
enum class GenderRestriction {
|
||||
ALL, MALE_ONLY, FEMALE_ONLY
|
||||
}
|
||||
|
||||
@@ -14,8 +14,10 @@ import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationItem
|
||||
import kr.co.vividnext.sodalive.live.room.donation.QGetLiveRoomDonationItem
|
||||
import kr.co.vividnext.sodalive.live.room.like.GetLiveRoomHeartListItem
|
||||
import kr.co.vividnext.sodalive.live.room.like.QGetLiveRoomHeartListItem
|
||||
import kr.co.vividnext.sodalive.member.Gender
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
import kr.co.vividnext.sodalive.member.QMember.member
|
||||
import kr.co.vividnext.sodalive.member.block.QBlockMember.blockMember
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
@@ -32,7 +34,8 @@ interface LiveRoomQueryRepository {
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom>
|
||||
|
||||
fun getLiveRoomListReservationWithDate(
|
||||
@@ -41,14 +44,16 @@ interface LiveRoomQueryRepository {
|
||||
limit: Long,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom>
|
||||
|
||||
fun getLiveRoomListReservationWithoutDate(
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom>
|
||||
|
||||
fun getLiveRoom(id: Long): LiveRoom?
|
||||
@@ -76,7 +81,8 @@ class LiveRoomQueryRepositoryImpl(
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom> {
|
||||
var where = liveRoom.channelName.isNotNull
|
||||
.and(liveRoom.channelName.isNotEmpty)
|
||||
@@ -94,10 +100,33 @@ class LiveRoomQueryRepositoryImpl(
|
||||
)
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
if (effectiveGender != null && effectiveGender != Gender.NONE) {
|
||||
where = when (effectiveGender) {
|
||||
Gender.MALE -> where.and(
|
||||
liveRoom.genderRestriction.`in`(GenderRestriction.ALL, GenderRestriction.MALE_ONLY)
|
||||
)
|
||||
Gender.FEMALE -> where.and(
|
||||
liveRoom.genderRestriction.`in`(GenderRestriction.ALL, GenderRestriction.FEMALE_ONLY)
|
||||
)
|
||||
Gender.NONE -> where
|
||||
}
|
||||
}
|
||||
|
||||
var select = queryFactory
|
||||
.selectFrom(liveRoom)
|
||||
.innerJoin(liveRoom.member, member)
|
||||
.leftJoin(quarterLiveRankings).on(liveRoom.id.eq(quarterLiveRankings.roomId))
|
||||
|
||||
if (memberId != null) {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.and(blockMember.isActive.isTrue)
|
||||
|
||||
select = select.leftJoin(blockMember).on(blockMemberCondition)
|
||||
where = where.and(blockMember.id.isNull)
|
||||
}
|
||||
|
||||
return select
|
||||
.where(where)
|
||||
.offset(offset)
|
||||
.limit(limit)
|
||||
@@ -116,7 +145,8 @@ class LiveRoomQueryRepositoryImpl(
|
||||
limit: Long,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom> {
|
||||
var where = liveRoom.beginDateTime.goe(date)
|
||||
.and(liveRoom.beginDateTime.lt(date.plusDays(1)))
|
||||
@@ -138,9 +168,32 @@ class LiveRoomQueryRepositoryImpl(
|
||||
)
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
if (effectiveGender != null && effectiveGender != Gender.NONE) {
|
||||
where = when (effectiveGender) {
|
||||
Gender.MALE -> where.and(
|
||||
liveRoom.genderRestriction.`in`(GenderRestriction.ALL, GenderRestriction.MALE_ONLY)
|
||||
)
|
||||
Gender.FEMALE -> where.and(
|
||||
liveRoom.genderRestriction.`in`(GenderRestriction.ALL, GenderRestriction.FEMALE_ONLY)
|
||||
)
|
||||
Gender.NONE -> where
|
||||
}
|
||||
}
|
||||
|
||||
var select = queryFactory
|
||||
.selectFrom(liveRoom)
|
||||
.innerJoin(liveRoom.member, member)
|
||||
|
||||
if (memberId != null) {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.and(blockMember.isActive.isTrue)
|
||||
|
||||
select = select.leftJoin(blockMember).on(blockMemberCondition)
|
||||
where = where.and(blockMember.id.isNull)
|
||||
}
|
||||
|
||||
return select
|
||||
.where(where)
|
||||
.offset(offset)
|
||||
.limit(limit)
|
||||
@@ -152,7 +205,8 @@ class LiveRoomQueryRepositoryImpl(
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom> {
|
||||
var where = liveRoom.beginDateTime.gt(
|
||||
LocalDateTime.now()
|
||||
@@ -178,6 +232,18 @@ class LiveRoomQueryRepositoryImpl(
|
||||
)
|
||||
}
|
||||
|
||||
if (effectiveGender != null && effectiveGender != Gender.NONE) {
|
||||
where = when (effectiveGender) {
|
||||
Gender.MALE -> where.and(
|
||||
liveRoom.genderRestriction.`in`(GenderRestriction.ALL, GenderRestriction.MALE_ONLY)
|
||||
)
|
||||
Gender.FEMALE -> where.and(
|
||||
liveRoom.genderRestriction.`in`(GenderRestriction.ALL, GenderRestriction.FEMALE_ONLY)
|
||||
)
|
||||
Gender.NONE -> where
|
||||
}
|
||||
}
|
||||
|
||||
val orderBy = if (memberId != null) {
|
||||
listOf(
|
||||
CaseBuilder()
|
||||
@@ -190,10 +256,21 @@ class LiveRoomQueryRepositoryImpl(
|
||||
listOf(liveRoom.beginDateTime.asc())
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
var select = queryFactory
|
||||
.selectFrom(liveRoom)
|
||||
.innerJoin(liveRoom.member, member)
|
||||
.limit(10)
|
||||
|
||||
if (memberId != null) {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.and(blockMember.isActive.isTrue)
|
||||
|
||||
select = select.leftJoin(blockMember).on(blockMemberCondition)
|
||||
where = where.and(blockMember.id.isNull)
|
||||
}
|
||||
|
||||
return select
|
||||
.where(where)
|
||||
.orderBy(*orderBy.toTypedArray())
|
||||
.fetch()
|
||||
|
||||
@@ -193,13 +193,21 @@ class LiveRoomService(
|
||||
member: Member?,
|
||||
timezone: String
|
||||
): List<GetRoomListResponse> {
|
||||
val effectiveGender = member?.let {
|
||||
if (it.auth != null) {
|
||||
if (it.auth!!.gender == 1) Gender.MALE else Gender.FEMALE
|
||||
} else {
|
||||
it.gender
|
||||
}
|
||||
}
|
||||
val roomList = if (status == LiveRoomStatus.NOW) {
|
||||
getLiveRoomListNow(
|
||||
pageable,
|
||||
timezone,
|
||||
memberId = member?.id,
|
||||
isCreator = member?.role == MemberRole.CREATOR,
|
||||
isAdult = member?.auth != null && isAdultContentVisible
|
||||
isAdult = member?.auth != null && isAdultContentVisible,
|
||||
effectiveGender = effectiveGender
|
||||
)
|
||||
} else if (dateString != null) {
|
||||
getLiveRoomListReservationWithDate(
|
||||
@@ -208,14 +216,16 @@ class LiveRoomService(
|
||||
timezone,
|
||||
memberId = member?.id,
|
||||
isCreator = member?.role == MemberRole.CREATOR,
|
||||
isAdult = member?.auth != null && isAdultContentVisible
|
||||
isAdult = member?.auth != null && isAdultContentVisible,
|
||||
effectiveGender = effectiveGender
|
||||
)
|
||||
} else {
|
||||
getLiveRoomListReservationWithoutDate(
|
||||
timezone,
|
||||
isCreator = member?.role == MemberRole.CREATOR,
|
||||
memberId = member?.id,
|
||||
isAdult = member?.auth != null && isAdultContentVisible
|
||||
isAdult = member?.auth != null && isAdultContentVisible,
|
||||
effectiveGender = effectiveGender
|
||||
)
|
||||
}
|
||||
|
||||
@@ -223,13 +233,6 @@ class LiveRoomService(
|
||||
val languageTagByMemberId = buildLanguageTagMap(creatorIds)
|
||||
|
||||
return roomList
|
||||
.filter {
|
||||
if (member?.id != null) {
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
.map {
|
||||
val roomInfo = roomInfoRepository.findByIdOrNull(it.id!!)
|
||||
|
||||
@@ -296,7 +299,8 @@ class LiveRoomService(
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom> {
|
||||
return repository.getLiveRoomListNow(
|
||||
offset = pageable.offset,
|
||||
@@ -304,7 +308,8 @@ class LiveRoomService(
|
||||
timezone = timezone,
|
||||
memberId = memberId,
|
||||
isCreator = isCreator,
|
||||
isAdult = isAdult
|
||||
isAdult = isAdult,
|
||||
effectiveGender = effectiveGender
|
||||
)
|
||||
}
|
||||
|
||||
@@ -314,7 +319,8 @@ class LiveRoomService(
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom> {
|
||||
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
||||
val date = LocalDate.parse(dateString, dateTimeFormatter).atStartOfDay()
|
||||
@@ -328,7 +334,8 @@ class LiveRoomService(
|
||||
limit = pageable.pageSize.toLong(),
|
||||
memberId = memberId,
|
||||
isCreator = isCreator,
|
||||
isAdult = isAdult
|
||||
isAdult = isAdult,
|
||||
effectiveGender = effectiveGender
|
||||
)
|
||||
}
|
||||
|
||||
@@ -336,9 +343,10 @@ class LiveRoomService(
|
||||
timezone: String,
|
||||
memberId: Long?,
|
||||
isCreator: Boolean,
|
||||
isAdult: Boolean
|
||||
isAdult: Boolean,
|
||||
effectiveGender: Gender?
|
||||
): List<LiveRoom> {
|
||||
return repository.getLiveRoomListReservationWithoutDate(timezone, memberId, isCreator, isAdult)
|
||||
return repository.getLiveRoomListReservationWithoutDate(timezone, memberId, isCreator, isAdult, effectiveGender)
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@@ -400,7 +408,8 @@ class LiveRoomService(
|
||||
},
|
||||
type = request.type,
|
||||
password = request.password,
|
||||
isAvailableJoinCreator = request.isAvailableJoinCreator
|
||||
isAvailableJoinCreator = request.isAvailableJoinCreator,
|
||||
genderRestriction = request.genderRestriction
|
||||
)
|
||||
room.member = member
|
||||
|
||||
@@ -479,7 +488,8 @@ class LiveRoomService(
|
||||
isAuth = createdRoom.isAdult,
|
||||
isAvailableJoinCreator = createdRoom.isAvailableJoinCreator,
|
||||
roomId = createdRoom.id,
|
||||
creatorId = createdRoom.member!!.id
|
||||
creatorId = createdRoom.member!!.id,
|
||||
genderRestriction = createdRoom.genderRestriction
|
||||
)
|
||||
)
|
||||
|
||||
@@ -494,6 +504,10 @@ class LiveRoomService(
|
||||
throw SodaException(messageKey = "live.room.adult_verification_required")
|
||||
}
|
||||
|
||||
if (!member.canEnter(room.genderRestriction) && room.member!!.id!! != member.id!!) {
|
||||
throw SodaException(messageKey = "live.room.gender_restricted")
|
||||
}
|
||||
|
||||
val beginDateTime = room.beginDateTime
|
||||
.atZone(ZoneId.of("UTC"))
|
||||
.withZoneSameInstant(ZoneId.of(timezone))
|
||||
@@ -521,6 +535,7 @@ class LiveRoomService(
|
||||
isPaid = false,
|
||||
isAdult = room.isAdult,
|
||||
isPrivateRoom = room.type == LiveRoomType.PRIVATE,
|
||||
genderRestriction = room.genderRestriction,
|
||||
password = room.password
|
||||
)
|
||||
response.manager = GetRoomDetailManager(room.member!!, cloudFrontHost = cloudFrontHost)
|
||||
@@ -640,7 +655,8 @@ class LiveRoomService(
|
||||
isAuth = room.isAdult,
|
||||
isAvailableJoinCreator = room.isAvailableJoinCreator,
|
||||
roomId = room.id,
|
||||
creatorId = room.member!!.id
|
||||
creatorId = room.member!!.id,
|
||||
genderRestriction = room.genderRestriction
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -739,6 +755,10 @@ class LiveRoomService(
|
||||
)
|
||||
}
|
||||
|
||||
if (room.member!!.id!! != member.id!! && !member.canEnter(room.genderRestriction)) {
|
||||
throw SodaException(messageKey = "live.room.gender_restricted")
|
||||
}
|
||||
|
||||
val lock = getOrCreateLock(memberId = member.id!!)
|
||||
lock.write {
|
||||
var roomInfo = roomInfoRepository.findByIdOrNull(request.roomId)
|
||||
@@ -853,6 +873,10 @@ class LiveRoomService(
|
||||
room.isAdult = request.isAdult
|
||||
}
|
||||
|
||||
if (request.genderRestriction != null) {
|
||||
room.genderRestriction = request.genderRestriction
|
||||
}
|
||||
|
||||
if (request.isActiveMenuPan != null) {
|
||||
if (request.isActiveMenuPan) {
|
||||
if (request.menuPanId > 0) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package kr.co.vividnext.sodalive.live.room.detail
|
||||
|
||||
import kr.co.vividnext.sodalive.live.room.GenderRestriction
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
|
||||
@@ -11,6 +12,7 @@ data class GetRoomDetailResponse(
|
||||
var isPaid: Boolean,
|
||||
val isAdult: Boolean,
|
||||
val isPrivateRoom: Boolean,
|
||||
val genderRestriction: GenderRestriction,
|
||||
val password: String?,
|
||||
val tags: List<String>,
|
||||
val channelName: String?,
|
||||
|
||||
@@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.member
|
||||
|
||||
import kr.co.vividnext.sodalive.common.BaseEntity
|
||||
import kr.co.vividnext.sodalive.explorer.GetExplorerSectionCreatorResponse
|
||||
import kr.co.vividnext.sodalive.live.room.GenderRestriction
|
||||
import kr.co.vividnext.sodalive.member.auth.Auth
|
||||
import kr.co.vividnext.sodalive.member.following.CreatorFollowing
|
||||
import kr.co.vividnext.sodalive.member.notification.MemberNotification
|
||||
@@ -148,6 +149,22 @@ data class Member(
|
||||
follow = follow
|
||||
)
|
||||
}
|
||||
|
||||
fun canEnter(restriction: GenderRestriction): Boolean {
|
||||
val effectiveGender = if (auth != null) {
|
||||
if (auth!!.gender == 1) Gender.MALE else Gender.FEMALE
|
||||
} else {
|
||||
gender
|
||||
}
|
||||
|
||||
if (effectiveGender == Gender.NONE) return true
|
||||
|
||||
return when (restriction) {
|
||||
GenderRestriction.ALL -> true
|
||||
GenderRestriction.MALE_ONLY -> effectiveGender == Gender.MALE
|
||||
GenderRestriction.FEMALE_ONLY -> effectiveGender == Gender.FEMALE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum class Gender {
|
||||
|
||||
@@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.fcm.PushTokenInfo
|
||||
import kr.co.vividnext.sodalive.fcm.QPushToken.pushToken
|
||||
import kr.co.vividnext.sodalive.fcm.QPushTokenInfo
|
||||
import kr.co.vividnext.sodalive.live.reservation.QLiveReservation.liveReservation
|
||||
import kr.co.vividnext.sodalive.live.room.GenderRestriction
|
||||
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
|
||||
@@ -35,14 +36,16 @@ interface MemberQueryRepository {
|
||||
fun getCreateLiveRoomNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean,
|
||||
isAvailableJoinCreator: Boolean
|
||||
isAvailableJoinCreator: Boolean,
|
||||
genderRestriction: GenderRestriction? = null
|
||||
): List<PushTokenInfo>
|
||||
|
||||
fun getStartLiveRoomNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
roomId: Long,
|
||||
isAuth: Boolean,
|
||||
isAvailableJoinCreator: Boolean
|
||||
isAvailableJoinCreator: Boolean,
|
||||
genderRestriction: GenderRestriction? = null
|
||||
): List<PushTokenInfo>
|
||||
|
||||
fun getUploadContentNotificationRecipientPushTokens(
|
||||
@@ -132,7 +135,8 @@ class MemberQueryRepositoryImpl(
|
||||
override fun getCreateLiveRoomNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean,
|
||||
isAvailableJoinCreator: Boolean
|
||||
isAvailableJoinCreator: Boolean,
|
||||
genderRestriction: GenderRestriction?
|
||||
): List<PushTokenInfo> {
|
||||
val member = QMember.member
|
||||
val creator = QMember.member
|
||||
@@ -158,6 +162,10 @@ class MemberQueryRepositoryImpl(
|
||||
where = where.and(creatorFollowing.member.role.ne(MemberRole.CREATOR))
|
||||
}
|
||||
|
||||
if (genderRestriction != null && genderRestriction != GenderRestriction.ALL) {
|
||||
where = where.and(getGenderCondition(genderRestriction))
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
.select(
|
||||
QPushTokenInfo(
|
||||
@@ -180,7 +188,8 @@ class MemberQueryRepositoryImpl(
|
||||
creatorId: Long,
|
||||
roomId: Long,
|
||||
isAuth: Boolean,
|
||||
isAvailableJoinCreator: Boolean
|
||||
isAvailableJoinCreator: Boolean,
|
||||
genderRestriction: GenderRestriction?
|
||||
): List<PushTokenInfo> {
|
||||
val member = QMember.member
|
||||
val creator = QMember.member
|
||||
@@ -206,6 +215,10 @@ class MemberQueryRepositoryImpl(
|
||||
where = where.and(creatorFollowing.member.role.ne(MemberRole.CREATOR))
|
||||
}
|
||||
|
||||
if (genderRestriction != null && genderRestriction != GenderRestriction.ALL) {
|
||||
where = where.and(getGenderCondition(genderRestriction))
|
||||
}
|
||||
|
||||
val followingMemberPushToken = queryFactory
|
||||
.select(
|
||||
QPushTokenInfo(
|
||||
@@ -237,6 +250,10 @@ class MemberQueryRepositoryImpl(
|
||||
where = where.and(auth.isNotNull)
|
||||
}
|
||||
|
||||
if (genderRestriction != null && genderRestriction != GenderRestriction.ALL) {
|
||||
where = where.and(getGenderCondition(genderRestriction, liveReservation.member))
|
||||
}
|
||||
|
||||
val reservationMemberPushToken = queryFactory
|
||||
.select(
|
||||
QPushTokenInfo(
|
||||
@@ -256,6 +273,33 @@ class MemberQueryRepositoryImpl(
|
||||
return (followingMemberPushToken + reservationMemberPushToken).distinctBy { it.token }
|
||||
}
|
||||
|
||||
private fun getGenderCondition(
|
||||
genderRestriction: GenderRestriction,
|
||||
qMember: QMember = member
|
||||
) = when (genderRestriction) {
|
||||
GenderRestriction.MALE_ONLY -> {
|
||||
auth.isNotNull.and(auth.gender.eq(1))
|
||||
.or(
|
||||
auth.isNull.and(
|
||||
qMember.gender.eq(Gender.MALE)
|
||||
.or(qMember.gender.eq(Gender.NONE))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
GenderRestriction.FEMALE_ONLY -> {
|
||||
auth.isNotNull.and(auth.gender.eq(0))
|
||||
.or(
|
||||
auth.isNull.and(
|
||||
qMember.gender.eq(Gender.FEMALE)
|
||||
.or(qMember.gender.eq(Gender.NONE))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
else -> null
|
||||
}
|
||||
|
||||
override fun getUploadContentNotificationRecipientPushTokens(
|
||||
creatorId: Long,
|
||||
isAuth: Boolean
|
||||
|
||||
Reference in New Issue
Block a user