fix(series): 오리지널 시리즈 조회에 양방향 차단 필터를 적용한다
This commit is contained in:
@@ -126,6 +126,7 @@ class HomeService(
|
||||
)
|
||||
|
||||
val originalAudioDramaList = seriesService.getOriginalAudioDramaList(
|
||||
memberId = memberId,
|
||||
isAdult = isAdult,
|
||||
contentType = contentType
|
||||
)
|
||||
|
||||
@@ -42,6 +42,7 @@ class AudioContentMainTabSeriesController(private val service: AudioContentMainT
|
||||
|
||||
ApiResponse.ok(
|
||||
service.getOriginalAudioDramaList(
|
||||
memberId = member.id!!,
|
||||
isAdult = member.auth != null && (isAdultContentVisible ?: true),
|
||||
contentType = contentType ?: ContentType.ALL,
|
||||
offset = pageable.offset,
|
||||
|
||||
@@ -41,6 +41,7 @@ class AudioContentMainTabSeriesService(
|
||||
)
|
||||
|
||||
val originalAudioDrama = seriesService.getOriginalAudioDramaList(
|
||||
memberId = memberId,
|
||||
isAdult = isAdult,
|
||||
contentType = contentType,
|
||||
offset = 0,
|
||||
@@ -157,13 +158,15 @@ class AudioContentMainTabSeriesService(
|
||||
}
|
||||
|
||||
fun getOriginalAudioDramaList(
|
||||
memberId: Long,
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType,
|
||||
offset: Long,
|
||||
limit: Long
|
||||
): GetSeriesListResponse {
|
||||
val totalCount = seriesService.getOriginalAudioDramaTotalCount(isAdult, contentType)
|
||||
val totalCount = seriesService.getOriginalAudioDramaTotalCount(memberId, isAdult, contentType)
|
||||
val items = seriesService.getOriginalAudioDramaList(
|
||||
memberId = memberId,
|
||||
isAdult = isAdult,
|
||||
contentType = contentType,
|
||||
offset = offset,
|
||||
|
||||
@@ -84,11 +84,12 @@ interface ContentSeriesQueryRepository {
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType,
|
||||
locale: String,
|
||||
memberId: Long? = null,
|
||||
offset: Long = 0,
|
||||
limit: Long = 20
|
||||
): List<GetSeriesListResponse.SeriesListItem>
|
||||
|
||||
fun getOriginalAudioDramaTotalCount(isAdult: Boolean, contentType: ContentType): Int
|
||||
fun getOriginalAudioDramaTotalCount(isAdult: Boolean, contentType: ContentType, memberId: Long? = null): Int
|
||||
fun getGenreList(isAdult: Boolean, memberId: Long, contentType: ContentType): List<GetSeriesGenreListResponse>
|
||||
fun findByCurationIdV2(
|
||||
imageHost: String,
|
||||
@@ -715,6 +716,7 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType,
|
||||
locale: String,
|
||||
memberId: Long?,
|
||||
offset: Long,
|
||||
limit: Long
|
||||
): List<GetSeriesListResponse.SeriesListItem> {
|
||||
@@ -744,6 +746,24 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
where = where.and(audioContent.isAdult.isFalse)
|
||||
}
|
||||
|
||||
if (memberId != null) {
|
||||
val blockedSubquery = queryFactory
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
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())
|
||||
}
|
||||
|
||||
val now = LocalDateTime.now()
|
||||
val sevenDaysAgo = now.minusDays(7)
|
||||
|
||||
@@ -823,7 +843,7 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOriginalAudioDramaTotalCount(isAdult: Boolean, contentType: ContentType): Int {
|
||||
override fun getOriginalAudioDramaTotalCount(isAdult: Boolean, contentType: ContentType, memberId: Long?): Int {
|
||||
var where = series.isOriginal.isTrue
|
||||
.and(series.isActive.isTrue)
|
||||
|
||||
@@ -845,6 +865,24 @@ class ContentSeriesQueryRepositoryImpl(
|
||||
}
|
||||
}
|
||||
|
||||
if (memberId != null) {
|
||||
val blockedSubquery = queryFactory
|
||||
.select(blockMember.id)
|
||||
.from(blockMember)
|
||||
.where(
|
||||
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())
|
||||
}
|
||||
|
||||
return queryFactory
|
||||
.select(series.id)
|
||||
.from(series)
|
||||
|
||||
@@ -46,10 +46,27 @@ class ContentSeriesService(
|
||||
private val coverImageHost: String
|
||||
) {
|
||||
fun getOriginalAudioDramaTotalCount(isAdult: Boolean, contentType: ContentType): Int {
|
||||
return repository.getOriginalAudioDramaTotalCount(isAdult, contentType)
|
||||
return repository.getOriginalAudioDramaTotalCount(
|
||||
isAdult = isAdult,
|
||||
contentType = contentType,
|
||||
memberId = null
|
||||
)
|
||||
}
|
||||
|
||||
fun getOriginalAudioDramaTotalCount(
|
||||
memberId: Long?,
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType
|
||||
): Int {
|
||||
return repository.getOriginalAudioDramaTotalCount(
|
||||
isAdult = isAdult,
|
||||
contentType = contentType,
|
||||
memberId = memberId
|
||||
)
|
||||
}
|
||||
|
||||
fun getOriginalAudioDramaList(
|
||||
memberId: Long?,
|
||||
isAdult: Boolean,
|
||||
contentType: ContentType,
|
||||
offset: Long = 0,
|
||||
@@ -60,6 +77,7 @@ class ContentSeriesService(
|
||||
isAdult = isAdult,
|
||||
contentType = contentType,
|
||||
locale = langContext.lang.code,
|
||||
memberId = memberId,
|
||||
offset = offset,
|
||||
limit = limit
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user