diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt index fafccf7..268e0d7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -175,6 +175,8 @@ class AudioContentController(private val service: AudioContentService) { @GetMapping("/ranking") fun getAudioContentRanking( @RequestParam("sort-type", required = false) sortType: String? = "매출", + @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, + @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -192,7 +194,8 @@ class AudioContentController(private val service: AudioContentService) { ApiResponse.ok( service.getAudioContentRanking( - isAdult = member.auth != null, + isAdult = member.auth != null && (isAdultContentVisible ?: true), + contentType = contentType ?: ContentType.ALL, startDate = startDate, endDate = endDate, offset = pageable.offset, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index 1e785f2..35d858a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -140,6 +140,7 @@ interface AudioContentQueryRepository { fun getAudioContentRanking( cloudfrontHost: String, isAdult: Boolean, + contentType: ContentType, startDate: LocalDateTime, endDate: LocalDateTime, offset: Long = 0, @@ -922,6 +923,7 @@ class AudioContentQueryRepositoryImpl( override fun getAudioContentRanking( cloudfrontHost: String, isAdult: Boolean, + contentType: ContentType, startDate: LocalDateTime, endDate: LocalDateTime, offset: Long, @@ -938,6 +940,20 @@ class AudioContentQueryRepositoryImpl( if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) + } else { + if (contentType != ContentType.ALL) { + where = where.and( + audioContent.member.isNull.or( + audioContent.member.auth.gender.eq( + if (contentType == ContentType.MALE) { + 0 + } else { + 1 + } + ) + ) + ) + } } var select = queryFactory diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index db7db4c..cc458ba 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -759,6 +759,7 @@ class AudioContentService( ) fun getAudioContentRanking( isAdult: Boolean, + contentType: ContentType, startDate: LocalDateTime, endDate: LocalDateTime, offset: Long, @@ -774,6 +775,7 @@ class AudioContentService( startDate = startDate.minusDays(1), endDate = endDate.minusDays(1), isAdult = isAdult, + contentType = contentType, offset = offset, limit = limit, sortType = sortType diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/AudioContentMainTabContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/AudioContentMainTabContentService.kt index 9d8fd17..bce8884 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/AudioContentMainTabContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/AudioContentMainTabContentService.kt @@ -88,6 +88,7 @@ class AudioContentMainTabContentService( val contentRankCreatorList = rankingService.fetchCreatorBySellContentCountRankTop20( memberId = member.id!!, + isAdult = isAdult, contentType = contentType, startDate = dailyRankingStartDate, endDate = dailyRankingEndDate @@ -164,14 +165,22 @@ class AudioContentMainTabContentService( val dailyRankingEndDate = dailyRankingStartDate .plusDays(1) - return rankingService.getContentRanking( - memberId = memberId, - isAdult = isAdult, - contentType = contentType, - startDate = dailyRankingStartDate, - endDate = dailyRankingEndDate, - sortType = sortType - ) + var loopCount = 0 + var contentList: List + + do { + contentList = rankingService.getContentRanking( + memberId = memberId, + isAdult = isAdult, + contentType = contentType, + startDate = dailyRankingStartDate.minusDays(loopCount * 5L), + endDate = dailyRankingEndDate, + sortType = sortType + ) + loopCount++ + } while (contentList.size < 5 && loopCount < 5) + + return contentList } fun getNewContentByTheme( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt index a748425..7179cd3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt @@ -83,6 +83,7 @@ class AudioContentMainTabHomeService( val contentRankCreatorList = rankingService.fetchCreatorBySellContentCountRankTop20( memberId = member.id!!, + isAdult = isAdult, contentType = contentType, startDate = startDate.minusDays(1), endDate = endDate diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt index 611f595..b0639c1 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt @@ -409,6 +409,7 @@ class RankingRepository( fun fetchCreatorBySellContentCountRankTop20( memberId: Long, + isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, endDate: LocalDateTime @@ -422,7 +423,7 @@ class RankingRepository( .and(order.createdAt.goe(startDate)) .and(order.createdAt.lt(endDate)) - var memberCondition = member.isActive.isTrue + val memberCondition = member.isActive.isTrue .and(member.role.eq(MemberRole.CREATOR)) .and(member.id.eq(audioContent.member.id)) @@ -432,18 +433,22 @@ class RankingRepository( .and(audioContent.limited.isNull) .and(blockMember.id.isNull) - if (contentType != ContentType.ALL) { - where = where.and( - audioContent.member.auth.isNull.or( - audioContent.member.auth.gender.eq( - if (contentType == ContentType.MALE) { - 0 - } else { - 1 - } + if (!isAdult) { + where = where.and(audioContent.isAdult.isFalse) + } else { + if (contentType != ContentType.ALL) { + where = where.and( + audioContent.member.auth.isNull.or( + audioContent.member.auth.gender.eq( + if (contentType == ContentType.MALE) { + 0 + } else { + 1 + } + ) ) ) - ) + } } return queryFactory diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt index e921c34..8fcc42d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt @@ -49,17 +49,25 @@ class RankingService( sortType: String = "매출", theme: String = "" ): List { - return repository.getAudioContentRanking( - memberId = memberId, - isAdult = isAdult, - contentType = contentType, - startDate = startDate, - endDate = endDate, - offset = offset, - limit = limit, - sortType = sortType, - theme = theme - ) + var loopCount = 0L + var contentList: List + + do { + contentList = repository.getAudioContentRanking( + memberId = memberId, + isAdult = isAdult, + contentType = contentType, + startDate = startDate.minusWeeks(loopCount), + endDate = endDate, + offset = offset, + limit = limit, + sortType = sortType, + theme = theme + ) + loopCount++ + } while (contentList.size < 5 && loopCount < 5) + + return contentList } fun getSeriesRanking( @@ -69,7 +77,20 @@ class RankingService( startDate: LocalDateTime, endDate: LocalDateTime ): List { - val seriesList = repository.getSeriesRanking(memberId, isAdult, contentType, startDate, endDate) + var loopCount = 0L + var seriesList: List + + do { + seriesList = repository.getSeriesRanking( + memberId = memberId, + isAdult = isAdult, + contentType = contentType, + startDate = startDate.minusWeeks(loopCount), + endDate = endDate + ) + loopCount++ + } while (seriesList.size < 5 && loopCount < 5) + return seriesToSeriesListItem(seriesList = seriesList, isAdult = isAdult) } @@ -189,11 +210,12 @@ class RankingService( fun fetchCreatorBySellContentCountRankTop20( memberId: Long, + isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, endDate: LocalDateTime ): List { - return repository.fetchCreatorBySellContentCountRankTop20(memberId, contentType, startDate, endDate) + return repository.fetchCreatorBySellContentCountRankTop20(memberId, isAdult, contentType, startDate, endDate) } fun fetchCreatorContentBySalesCountTop4(