Compare commits

..

No commits in common. "72ee39612e20d2bd6e647fa7ca31fcfb67a5db04" and "51fd5408dcf63ed83eca25813eab87ce36388623" have entirely different histories.

4 changed files with 22 additions and 54 deletions

View File

@ -1,22 +0,0 @@
package kr.co.vividnext.sodalive.explorer
import kr.co.vividnext.sodalive.member.Member
import javax.persistence.Entity
import javax.persistence.FetchType
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
import javax.persistence.JoinColumn
import javax.persistence.OneToOne
@Entity
data class CreatorRanking(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = null,
val ranking: Int
) {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "creator_id", nullable = false)
var member: Member? = null
}

View File

@ -10,7 +10,6 @@ import kr.co.vividnext.sodalive.can.use.QUseCanCalculate.useCanCalculate
import kr.co.vividnext.sodalive.can.use.UseCanCalculateStatus import kr.co.vividnext.sodalive.can.use.UseCanCalculateStatus
import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.content.QAudioContent.audioContent import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
import kr.co.vividnext.sodalive.explorer.QCreatorRanking.creatorRanking
import kr.co.vividnext.sodalive.explorer.follower.GetFollowerListDto import kr.co.vividnext.sodalive.explorer.follower.GetFollowerListDto
import kr.co.vividnext.sodalive.explorer.follower.QGetFollowerListDto import kr.co.vividnext.sodalive.explorer.follower.QGetFollowerListDto
import kr.co.vividnext.sodalive.explorer.profile.ChannelNotice import kr.co.vividnext.sodalive.explorer.profile.ChannelNotice
@ -159,6 +158,21 @@ class ExplorerQueryRepository(
} }
} }
fun getSubscriberGrowthRankingCreators(limit: Long): List<Member> {
return queryFactory
.selectFrom(member)
.join(member.follower, creatorFollowing)
.where(
member.role.eq(MemberRole.CREATOR)
.and(creatorFollowing.createdAt.goe(LocalDateTime.now().minusMonths(1)))
.and(creatorFollowing.isActive.isTrue)
)
.groupBy(member.id)
.orderBy(member.follower.size().desc())
.limit(limit)
.fetch()
}
fun getNewCreators(): List<Member> { fun getNewCreators(): List<Member> {
return queryFactory return queryFactory
.selectFrom(member) .selectFrom(member)
@ -622,13 +636,4 @@ class ExplorerQueryRepository(
.where(member.id.eq(creatorId)) .where(member.id.eq(creatorId))
.fetchFirst() .fetchFirst()
} }
fun getCreatorRankings(): List<Member> {
return queryFactory
.select(member)
.from(creatorRanking)
.innerJoin(creatorRanking.member, member)
.orderBy(creatorRanking.ranking.asc())
.fetch()
}
} }

View File

@ -24,8 +24,6 @@ import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional import org.springframework.transaction.annotation.Transactional
import java.time.DayOfWeek import java.time.DayOfWeek
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.TemporalAdjusters import java.time.temporal.TemporalAdjusters
@Service @Service
@ -44,9 +42,9 @@ class ExplorerService(
fun getExplorer(member: Member, growthRankingCreatorsLimit: Long = 20): GetExplorerResponse { fun getExplorer(member: Member, growthRankingCreatorsLimit: Long = 20): GetExplorerResponse {
val sections = mutableListOf<GetExplorerSectionResponse>() val sections = mutableListOf<GetExplorerSectionResponse>()
// 인기 크리에이터 // 인기 급상승중 (subscriberGrowthRankingCreators)
val creatorRankings = queryRepository val growthRankingCreators = queryRepository
.getCreatorRankings() .getSubscriberGrowthRankingCreators(limit = growthRankingCreatorsLimit)
.asSequence() .asSequence()
.filter { !memberService.isBlocked(blockedMemberId = member.id!!, memberId = it.id!!) } .filter { !memberService.isBlocked(blockedMemberId = member.id!!, memberId = it.id!!) }
.map { .map {
@ -67,25 +65,13 @@ class ExplorerService(
} }
.toList() .toList()
val currentDateTime = LocalDateTime.now() val growthRankingSection = GetExplorerSectionResponse(
val lastMonday = currentDateTime title = "인기 급상승중",
.minusWeeks(1)
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
val lastSunday = lastMonday
.plusDays(6)
val formatter = DateTimeFormatter.ofPattern("MM월 dd일")
val formattedLastMonday = lastMonday.format(formatter)
val formattedLastSunday = lastSunday.format(formatter)
val creatorRankingSection = GetExplorerSectionResponse(
title = "인기 크리에이터",
coloredTitle = "인기", coloredTitle = "인기",
color = "FF5C49", color = "FF5C49",
desc = "$formattedLastMonday~$formattedLastSunday\n※ 인기 크리에이터의 순위는 매주 업데이트 됩니다.", creators = growthRankingCreators
creators = creatorRankings
) )
sections.add(creatorRankingSection) sections.add(growthRankingSection)
// 새로 시작 (newCreators) // 새로 시작 (newCreators)
val newCreators = queryRepository val newCreators = queryRepository

View File

@ -6,7 +6,6 @@ data class GetExplorerSectionResponse(
val title: String, val title: String,
val coloredTitle: String?, val coloredTitle: String?,
val color: String?, val color: String?,
val desc: String? = null,
val creators: List<GetExplorerSectionCreatorResponse> val creators: List<GetExplorerSectionCreatorResponse>
) )