라이브룸 성별 제한 추가
라이브룸 생성/수정 요청에 genderRestriction 필드 추가 라이브룸 상세 응답에 genderRestriction 필드 추가
This commit is contained in:
@@ -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