Merge pull request '탐색 - 인기 급상승 제거, 인기 크리에이터 섹션 추가' (#42) from test into main
Reviewed-on: #42
This commit is contained in:
commit
72ee39612e
|
@ -0,0 +1,22 @@
|
||||||
|
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
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ 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
|
||||||
|
@ -158,21 +159,6 @@ 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)
|
||||||
|
@ -636,4 +622,13 @@ 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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@ 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
|
||||||
|
@ -42,9 +44,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 growthRankingCreators = queryRepository
|
val creatorRankings = queryRepository
|
||||||
.getSubscriberGrowthRankingCreators(limit = growthRankingCreatorsLimit)
|
.getCreatorRankings()
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.filter { !memberService.isBlocked(blockedMemberId = member.id!!, memberId = it.id!!) }
|
.filter { !memberService.isBlocked(blockedMemberId = member.id!!, memberId = it.id!!) }
|
||||||
.map {
|
.map {
|
||||||
|
@ -65,13 +67,25 @@ class ExplorerService(
|
||||||
}
|
}
|
||||||
.toList()
|
.toList()
|
||||||
|
|
||||||
val growthRankingSection = GetExplorerSectionResponse(
|
val currentDateTime = LocalDateTime.now()
|
||||||
title = "인기 급상승중",
|
val lastMonday = currentDateTime
|
||||||
|
.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",
|
||||||
creators = growthRankingCreators
|
desc = "$formattedLastMonday~$formattedLastSunday\n※ 인기 크리에이터의 순위는 매주 업데이트 됩니다.",
|
||||||
|
creators = creatorRankings
|
||||||
)
|
)
|
||||||
sections.add(growthRankingSection)
|
sections.add(creatorRankingSection)
|
||||||
|
|
||||||
// 새로 시작 (newCreators)
|
// 새로 시작 (newCreators)
|
||||||
val newCreators = queryRepository
|
val newCreators = queryRepository
|
||||||
|
|
|
@ -6,6 +6,7 @@ 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>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue