fix(block-member): 양방향 차단 관계의 댓글·응원·콘텐츠 노출을 차단한다
This commit is contained in:
@@ -252,6 +252,7 @@ class AudioContentController(private val service: AudioContentService) {
|
||||
|
||||
ApiResponse.ok(
|
||||
service.getLatestContentByTheme(
|
||||
memberId = member.id!!,
|
||||
theme = if (theme == null) listOf() else listOf(theme),
|
||||
contentType = contentType ?: ContentType.ALL,
|
||||
offset = pageable.offset,
|
||||
@@ -272,6 +273,7 @@ class AudioContentController(private val service: AudioContentService) {
|
||||
) = run {
|
||||
ApiResponse.ok(
|
||||
service.getLatestContentByTheme(
|
||||
memberId = member?.id,
|
||||
theme = listOf("다시듣기"),
|
||||
contentType = contentType ?: ContentType.ALL,
|
||||
isFree = false,
|
||||
|
||||
@@ -469,9 +469,15 @@ class AudioContentQueryRepositoryImpl(
|
||||
limit: Long,
|
||||
isFree: Boolean
|
||||
): List<GetAudioContentMainItem> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
val orderBy = when (sortType) {
|
||||
SortType.NEWEST -> listOf(audioContent.releaseDate.desc(), audioContent.id.desc())
|
||||
@@ -562,9 +568,15 @@ class AudioContentQueryRepositoryImpl(
|
||||
offset: Long,
|
||||
limit: Long
|
||||
): List<GetAudioContentMainItem> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
val orderBy = listOf(audioContent.releaseDate.desc(), audioContent.id.desc())
|
||||
|
||||
@@ -630,9 +642,15 @@ class AudioContentQueryRepositoryImpl(
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType
|
||||
): Int {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = audioContent.isActive.isTrue
|
||||
.and(audioContent.duration.isNotNull)
|
||||
@@ -960,9 +978,15 @@ class AudioContentQueryRepositoryImpl(
|
||||
offset: Long,
|
||||
limit: Long
|
||||
): List<GetAudioContentMainItem> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = audioContentCuration.isActive.isTrue
|
||||
.and(audioContentCurationItem.isActive.isTrue)
|
||||
@@ -1337,9 +1361,15 @@ class AudioContentQueryRepositoryImpl(
|
||||
locale: String?
|
||||
): List<AudioContentMainItem> {
|
||||
val blockMemberCondition = if (memberId != null) {
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
@@ -524,6 +524,10 @@ class AudioContentService(
|
||||
val creator = explorerQueryRepository.getMember(creatorId)
|
||||
?: throw SodaException(messageKey = "content.error.user_not_found")
|
||||
|
||||
if (isBlockedBetweenMembers(memberId = member.id!!, creatorId = creatorId)) {
|
||||
throw SodaException(messageKey = "content.error.invalid_content_retry")
|
||||
}
|
||||
|
||||
val creatorFollowing = explorerQueryRepository.getCreatorFollowing(
|
||||
creatorId = creatorId,
|
||||
memberId = member.id!!
|
||||
@@ -534,12 +538,6 @@ class AudioContentService(
|
||||
contentId = audioContent.id!!
|
||||
)
|
||||
|
||||
// 차단된 사용자 체크
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = creatorId)
|
||||
if (isBlocked && !isExistsAudioContent) {
|
||||
throw SodaException(formatMessage("content.error.access_restricted_by_creator", creator.nickname))
|
||||
}
|
||||
|
||||
val orderSequence = if (isExistsAudioContent) {
|
||||
limitedEditionOrderRepository.getOrderSequence(
|
||||
contentId = audioContent.id!!,
|
||||
@@ -886,6 +884,10 @@ class AudioContentService(
|
||||
): GetAudioContentListItem? {
|
||||
val isAdult = member.auth != null && isAdultContentVisible
|
||||
|
||||
if (isBlockedBetweenMembers(memberId = member.id!!, creatorId = creatorId)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val audioContent = repository.findLatestContentByCreatorId(creatorId, isAdult) ?: return null
|
||||
|
||||
val commentCount = commentRepository
|
||||
@@ -957,6 +959,10 @@ class AudioContentService(
|
||||
val isAdult = member.auth != null && isAdultContentVisible
|
||||
val isCreator = member.id == creatorId
|
||||
|
||||
if (!isCreator && isBlockedBetweenMembers(memberId = member.id!!, creatorId = creatorId)) {
|
||||
return GetAudioContentListResponse(totalCount = 0, items = listOf())
|
||||
}
|
||||
|
||||
val totalCount = repository.findTotalCountByCreatorId(
|
||||
creatorId = creatorId,
|
||||
isCreator = isCreator,
|
||||
@@ -1313,8 +1319,8 @@ class AudioContentService(
|
||||
}
|
||||
}
|
||||
|
||||
private fun formatMessage(key: String, vararg args: Any): String {
|
||||
val template = messageSource.getMessage(key, langContext.lang) ?: return ""
|
||||
return String.format(template, *args)
|
||||
private fun isBlockedBetweenMembers(memberId: Long, creatorId: Long): Boolean {
|
||||
return blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = creatorId, memberId = memberId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +128,8 @@ class CategoryService(
|
||||
|
||||
@Transactional
|
||||
fun getCategoryList(creatorId: Long, memberId: Long): List<GetCategoryListResponse> {
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId)
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = creatorId, memberId = memberId)
|
||||
if (isBlocked) throw SodaException(messageKey = "category.error.invalid_access")
|
||||
|
||||
// 기본 카테고리 목록 조회 (원본 언어 기준)
|
||||
|
||||
@@ -98,6 +98,7 @@ class AudioContentCommentController(
|
||||
return ApiResponse.ok(
|
||||
service.getCommentReplyList(
|
||||
commentId = commentId,
|
||||
memberId = member.id!!,
|
||||
timezone = timezone,
|
||||
pageable = pageable
|
||||
)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.content.comment
|
||||
|
||||
import com.querydsl.core.types.dsl.Expressions
|
||||
import com.querydsl.jpa.JPAExpressions
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||
import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
|
||||
import kr.co.vividnext.sodalive.content.comment.QAudioContentComment.audioContentComment
|
||||
@@ -9,6 +10,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.member.QMember.member
|
||||
import kr.co.vividnext.sodalive.member.block.QBlockMember.blockMember
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
import java.time.LocalDateTime
|
||||
@@ -28,10 +30,11 @@ interface AudioContentCommentQueryRepository {
|
||||
): List<GetAudioContentCommentListItem>
|
||||
|
||||
fun totalCountCommentByContentId(contentId: Long, memberId: Long, isContentCreator: Boolean): Int
|
||||
fun commentReplyCountByAudioContentCommentId(commentId: Long): Int
|
||||
fun commentReplyCountByAudioContentCommentId(commentId: Long, memberId: Long): Int
|
||||
fun getAudioContentCommentReplyList(
|
||||
cloudFrontHost: String,
|
||||
commentId: Long,
|
||||
memberId: Long,
|
||||
timezone: String,
|
||||
offset: Long,
|
||||
limit: Int
|
||||
@@ -60,6 +63,8 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
var where = audioContentComment.audioContent.id.eq(contentId)
|
||||
.and(audioContentComment.isActive.isTrue)
|
||||
.and(audioContentComment.parent.isNull)
|
||||
.and(audioContentComment.member.id.notIn(blockedMemberIdSubQuery(memberId)))
|
||||
.and(audioContentComment.member.id.notIn(blockingMemberIdSubQuery(memberId)))
|
||||
|
||||
if (!isContentCreator) {
|
||||
where = where.and(
|
||||
@@ -106,7 +111,7 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
.map {
|
||||
it.copy(
|
||||
nickname = it.nickname.removeDeletedNicknamePrefix(),
|
||||
replyCount = commentReplyCountByAudioContentCommentId(it.id)
|
||||
replyCount = commentReplyCountByAudioContentCommentId(it.id, memberId)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -115,6 +120,8 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
var where = audioContentComment.audioContent.id.eq(contentId)
|
||||
.and(audioContentComment.isActive.isTrue)
|
||||
.and(audioContentComment.parent.isNull)
|
||||
.and(audioContentComment.member.id.notIn(blockedMemberIdSubQuery(memberId)))
|
||||
.and(audioContentComment.member.id.notIn(blockingMemberIdSubQuery(memberId)))
|
||||
|
||||
if (!isContentCreator) {
|
||||
where = where.and(
|
||||
@@ -133,13 +140,15 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
.size
|
||||
}
|
||||
|
||||
override fun commentReplyCountByAudioContentCommentId(commentId: Long): Int {
|
||||
override fun commentReplyCountByAudioContentCommentId(commentId: Long, memberId: Long): Int {
|
||||
return queryFactory.select(audioContentComment.id)
|
||||
.from(audioContentComment)
|
||||
.where(
|
||||
audioContentComment.parent.isNotNull
|
||||
.and(audioContentComment.parent.id.eq(commentId))
|
||||
.and(audioContentComment.isActive.isTrue)
|
||||
.and(audioContentComment.member.id.notIn(blockedMemberIdSubQuery(memberId)))
|
||||
.and(audioContentComment.member.id.notIn(blockingMemberIdSubQuery(memberId)))
|
||||
)
|
||||
.fetch()
|
||||
.size
|
||||
@@ -148,6 +157,7 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
override fun getAudioContentCommentReplyList(
|
||||
cloudFrontHost: String,
|
||||
commentId: Long,
|
||||
memberId: Long,
|
||||
timezone: String,
|
||||
offset: Long,
|
||||
limit: Int
|
||||
@@ -185,6 +195,8 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
audioContentComment.parent.isNotNull
|
||||
.and(audioContentComment.parent.id.eq(commentId))
|
||||
.and(audioContentComment.isActive.isTrue)
|
||||
.and(audioContentComment.member.id.notIn(blockedMemberIdSubQuery(memberId)))
|
||||
.and(audioContentComment.member.id.notIn(blockingMemberIdSubQuery(memberId)))
|
||||
)
|
||||
.offset(offset)
|
||||
.limit(limit.toLong())
|
||||
@@ -244,4 +256,20 @@ class AudioContentCommentQueryRepositoryImpl(
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
private fun blockedMemberIdSubQuery(memberId: Long) = JPAExpressions
|
||||
.select(blockMember.blockedMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
)
|
||||
|
||||
private fun blockingMemberIdSubQuery(memberId: Long) = JPAExpressions
|
||||
.select(blockMember.member.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.blockedMember.id.eq(memberId)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ class AudioContentCommentService(
|
||||
?: throw SodaException(messageKey = "content.error.invalid_content_retry")
|
||||
|
||||
val creator = audioContent.member!!
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = creator.id!!)
|
||||
val isBlocked = isBlockedBetweenMembers(memberId = member.id!!, creatorId = creator.id!!)
|
||||
if (isBlocked) {
|
||||
throw SodaException(formatMessage("content.comment.error.blocked_by_creator", creator.nickname))
|
||||
}
|
||||
@@ -136,6 +136,13 @@ class AudioContentCommentService(
|
||||
timezone: String,
|
||||
pageable: Pageable
|
||||
): GetAudioContentCommentListResponse {
|
||||
val audioContent = audioContentRepository.findByIdOrNull(id = audioContentId)
|
||||
?: return GetAudioContentCommentListResponse(totalCount = 0, items = listOf())
|
||||
|
||||
if (isBlockedBetweenMembers(memberId = memberId, creatorId = audioContent.member!!.id!!)) {
|
||||
return GetAudioContentCommentListResponse(totalCount = 0, items = listOf())
|
||||
}
|
||||
|
||||
val isContentCreator = audioContentRepository.isContentCreator(audioContentId, memberId)
|
||||
val commentList = repository.findByContentId(
|
||||
cloudFrontHost = cloudFrontHost,
|
||||
@@ -157,17 +164,26 @@ class AudioContentCommentService(
|
||||
|
||||
fun getCommentReplyList(
|
||||
commentId: Long,
|
||||
memberId: Long,
|
||||
timezone: String,
|
||||
pageable: Pageable
|
||||
): GetAudioContentCommentListResponse {
|
||||
val parentComment = repository.findByIdOrNull(id = commentId)
|
||||
?: return GetAudioContentCommentListResponse(totalCount = 0, items = listOf())
|
||||
|
||||
if (isBlockedBetweenMembers(memberId = memberId, creatorId = parentComment.audioContent!!.member!!.id!!)) {
|
||||
return GetAudioContentCommentListResponse(totalCount = 0, items = listOf())
|
||||
}
|
||||
|
||||
val commentList = repository.getAudioContentCommentReplyList(
|
||||
cloudFrontHost = cloudFrontHost,
|
||||
commentId = commentId,
|
||||
memberId = memberId,
|
||||
timezone = timezone,
|
||||
offset = pageable.offset,
|
||||
limit = pageable.pageSize
|
||||
)
|
||||
val totalCount = repository.commentReplyCountByAudioContentCommentId(commentId)
|
||||
val totalCount = repository.commentReplyCountByAudioContentCommentId(commentId, memberId)
|
||||
|
||||
return GetAudioContentCommentListResponse(totalCount, commentList)
|
||||
}
|
||||
@@ -176,4 +192,9 @@ class AudioContentCommentService(
|
||||
val template = messageSource.getMessage(key, langContext.lang) ?: return ""
|
||||
return String.format(template, *args)
|
||||
}
|
||||
|
||||
private fun isBlockedBetweenMembers(memberId: Long, creatorId: Long): Boolean {
|
||||
return blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = creatorId, memberId = memberId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ class AudioContentMainService(
|
||||
offset = pageable.offset,
|
||||
limit = pageable.pageSize.toLong()
|
||||
)
|
||||
.filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.creatorId) }
|
||||
.filter { !isBlockedBetweenMembers(memberId = member.id!!, creatorId = it.creatorId) }
|
||||
|
||||
val contentIds = contentList.map { it.contentId }
|
||||
val translatedContentList = if (contentIds.isNotEmpty()) {
|
||||
@@ -198,20 +198,17 @@ class AudioContentMainService(
|
||||
cloudfrontHost = imageHost,
|
||||
isAdult = isAdult
|
||||
)
|
||||
.asSequence()
|
||||
.filter { !blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.creatorId) }
|
||||
.toList()
|
||||
.filter { !isBlockedBetweenMembers(memberId = memberId, creatorId = it.creatorId) }
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
fun getAudioContentMainBannerList(memberId: Long, isAdult: Boolean) =
|
||||
repository.getAudioContentMainBannerList(isAdult = isAdult)
|
||||
.asSequence()
|
||||
.filter {
|
||||
if (it.type == AudioContentBannerType.CREATOR && it.creator != null) {
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.creator!!.id!!)
|
||||
!isBlockedBetweenMembers(memberId = memberId, creatorId = it.creator!!.id!!)
|
||||
} else if (it.type == AudioContentBannerType.SERIES && it.series != null) {
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.series!!.member!!.id!!)
|
||||
!isBlockedBetweenMembers(memberId = memberId, creatorId = it.series!!.member!!.id!!)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
@@ -255,7 +252,6 @@ class AudioContentMainService(
|
||||
link = it.link
|
||||
)
|
||||
}
|
||||
.toList()
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
@Cacheable(
|
||||
@@ -281,9 +277,14 @@ class AudioContentMainService(
|
||||
contentType = contentType
|
||||
)
|
||||
.filter { content ->
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = content.creatorId)
|
||||
!isBlockedBetweenMembers(memberId = memberId, creatorId = content.creatorId)
|
||||
}
|
||||
)
|
||||
}
|
||||
.filter { it.contents.isNotEmpty() }
|
||||
|
||||
private fun isBlockedBetweenMembers(memberId: Long, creatorId: Long): Boolean {
|
||||
return blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = creatorId, memberId = memberId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ class AudioContentBannerService(
|
||||
return repository.getAudioContentMainBannerList(tabId, isAdult)
|
||||
.filter {
|
||||
if (it.type == AudioContentBannerType.CREATOR && it.creator != null && memberId != null) {
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.creator!!.id!!)
|
||||
!isBlockedBetweenMembers(memberId = memberId, creatorId = it.creator!!.id!!)
|
||||
} else if (it.type == AudioContentBannerType.SERIES && it.series != null && memberId != null) {
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.series!!.member!!.id!!)
|
||||
!isBlockedBetweenMembers(memberId = memberId, creatorId = it.series!!.member!!.id!!)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
@@ -64,4 +64,9 @@ class AudioContentBannerService(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isBlockedBetweenMembers(memberId: Long, creatorId: Long): Boolean {
|
||||
return blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = creatorId, memberId = memberId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ class AudioContentCurationService(
|
||||
offset = pageable.offset,
|
||||
limit = pageable.pageSize.toLong()
|
||||
)
|
||||
.filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.creatorId) }
|
||||
.filter { !isBlockedBetweenMembers(memberId = member.id!!, creatorId = it.creatorId) }
|
||||
|
||||
return GetCurationContentResponse(
|
||||
totalCount = totalCount,
|
||||
@@ -68,7 +68,7 @@ class AudioContentCurationService(
|
||||
contentType = contentType
|
||||
).filter { item ->
|
||||
if (memberId != null) {
|
||||
!blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = item.creatorId)
|
||||
!isBlockedBetweenMembers(memberId = memberId, creatorId = item.creatorId)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
@@ -77,4 +77,9 @@ class AudioContentCurationService(
|
||||
}
|
||||
.filter { it.items.isNotEmpty() }
|
||||
}
|
||||
|
||||
private fun isBlockedBetweenMembers(memberId: Long, creatorId: Long): Boolean {
|
||||
return blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = creatorId, memberId = memberId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,9 +27,15 @@ class AudioContentMainTabRepository(
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType
|
||||
): List<ContentCreatorResponse> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = member.isActive.isTrue
|
||||
.and(member.role.eq(MemberRole.CREATOR))
|
||||
@@ -88,9 +94,15 @@ class AudioContentMainTabRepository(
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType
|
||||
): List<ContentCreatorResponse> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = member.isActive.isTrue
|
||||
.and(member.role.eq(MemberRole.CREATOR))
|
||||
|
||||
@@ -62,9 +62,15 @@ class ContentMainTabTagCurationRepository(
|
||||
tag: String,
|
||||
contentType: ContentType
|
||||
): List<GetAudioContentMainItem> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = audioContent.isActive.isTrue
|
||||
.and(audioContent.duration.isNotNull)
|
||||
|
||||
@@ -162,9 +162,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(series.member.id),
|
||||
blockMember.blockedMember.id.eq(memberId),
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(series.member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(series.member.id))
|
||||
)
|
||||
)
|
||||
)
|
||||
where = where.and(blockedSubquery.exists().not())
|
||||
}
|
||||
@@ -230,9 +236,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(series.member.id),
|
||||
blockMember.blockedMember.id.eq(memberId),
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(series.member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(series.member.id))
|
||||
)
|
||||
)
|
||||
)
|
||||
where = where.and(blockedSubquery.exists().not())
|
||||
}
|
||||
@@ -361,9 +373,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(series.member.id),
|
||||
blockMember.blockedMember.id.eq(memberId),
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(series.member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(series.member.id))
|
||||
)
|
||||
)
|
||||
)
|
||||
where = where.and(blockedSubquery.exists().not())
|
||||
}
|
||||
@@ -419,9 +437,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(series.member.id),
|
||||
blockMember.blockedMember.id.eq(memberId),
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(series.member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(series.member.id))
|
||||
)
|
||||
)
|
||||
)
|
||||
where = where.and(blockedSubquery.exists().not())
|
||||
}
|
||||
@@ -594,9 +618,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(series.member.id),
|
||||
blockMember.blockedMember.id.eq(memberId),
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(series.member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(series.member.id))
|
||||
)
|
||||
)
|
||||
)
|
||||
where = where.and(blockedSubquery.exists().not())
|
||||
}
|
||||
@@ -829,9 +859,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
memberId: Long,
|
||||
contentType: ContentType
|
||||
): List<GetSeriesGenreListResponse> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = seriesGenre.isActive.isTrue
|
||||
.and(series.isActive.isTrue)
|
||||
@@ -884,9 +920,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
contentType: ContentType,
|
||||
locale: String
|
||||
): List<GetSeriesListResponse.SeriesListItem> {
|
||||
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.isActive.isTrue)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
val blockMemberCondition = blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(member.id))
|
||||
)
|
||||
)
|
||||
|
||||
var where = series.isActive.isTrue
|
||||
.and(member.isActive.isTrue)
|
||||
@@ -1033,9 +1075,15 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
blockMember.member.id.eq(series.member.id),
|
||||
blockMember.blockedMember.id.eq(memberId),
|
||||
blockMember.isActive.isTrue
|
||||
.and(
|
||||
blockMember.member.id.eq(series.member.id)
|
||||
.and(blockMember.blockedMember.id.eq(memberId))
|
||||
.or(
|
||||
blockMember.member.id.eq(memberId)
|
||||
.and(blockMember.blockedMember.id.eq(series.member.id))
|
||||
)
|
||||
)
|
||||
)
|
||||
where = where.and(blockedSubquery.exists().not())
|
||||
}
|
||||
|
||||
@@ -226,7 +226,8 @@ class ContentSeriesService(
|
||||
contentType = contentType
|
||||
) ?: throw SodaException(messageKey = "series.error.invalid_series_retry")
|
||||
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = series.member!!.id!!)
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = series.member!!.id!!) ||
|
||||
blockMemberRepository.isBlocked(blockedMemberId = series.member!!.id!!, memberId = member.id!!)
|
||||
if (isBlocked) {
|
||||
throw SodaException(messageKey = "series.error.invalid_series_retry")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user