feat(recommend): 추천 점수 산식 상수를 분리한다

This commit is contained in:
2026-05-31 00:56:59 +09:00
parent 602063863a
commit a7e17fede2
3 changed files with 70 additions and 12 deletions

View File

@@ -13,6 +13,9 @@ class RecommendationScorePolicyTest {
fun shouldApplyCreatorNewBoostByDebutDays() {
val now = LocalDateTime.of(2026, 5, 30, 12, 0)
assertEquals(10L, RecommendationScoreSpec.NEW_BOOST_10_DAY_LIMIT)
assertEquals(20L, RecommendationScoreSpec.NEW_BOOST_20_DAY_LIMIT)
assertEquals(30L, RecommendationScoreSpec.NEW_BOOST_30_DAY_LIMIT)
assertEquals(1.5, policy.calculateCreatorNewBoost(now.minusDays(10), now), 0.0001)
assertEquals(1.3, policy.calculateCreatorNewBoost(now.minusDays(20), now), 0.0001)
assertEquals(1.2, policy.calculateCreatorNewBoost(now.minusDays(30), now), 0.0001)
@@ -33,6 +36,10 @@ class RecommendationScorePolicyTest {
@Test
@DisplayName("최근 데뷔 크리에이터 추천 점수는 PRD 가중치와 신규 부스트를 적용한다")
fun shouldCalculateDebutCreatorScore() {
assertEquals(0.35, RecommendationScoreSpec.DEBUT_FOLLOW_INCREASE_WEIGHT, 0.0001)
assertEquals(0.3, RecommendationScoreSpec.DEBUT_CONTENT_ACTIVITY_WEIGHT, 0.0001)
assertEquals(0.2, RecommendationScoreSpec.DEBUT_COMMUNICATION_WEIGHT, 0.0001)
val score = policy.calculateDebutCreatorScore(
followIncrease = 10,
contentActivityScore = 20,
@@ -44,21 +51,27 @@ class RecommendationScorePolicyTest {
}
@Test
@DisplayName("AI 채팅 추천 점수는 PRD 가중치와 신규 부스트를 적용한다")
@DisplayName("AI 채팅 추천 점수는 이번 스프린트에서 팔로우 증가량을 제외한다")
fun shouldCalculateAiChatScore() {
assertEquals(0.45, RecommendationScoreSpec.AI_RECENT_CHAT_WEIGHT, 0.0001)
assertEquals(0.35, RecommendationScoreSpec.AI_RECENT_ACTIVE_USER_WEIGHT, 0.0001)
val score = policy.calculateAiChatScore(
recentChatCount = 100,
recentActiveUserCount = 20,
followIncrease = 10,
newBoost = 1.3
)
assertEquals(70.2, score, 0.0001)
assertEquals(67.6, score, 0.0001)
}
@Test
@DisplayName("최근 응원 추천 점수는 후원 금액, 팬 Talk 수, 후원 수에 가중치를 적용한다")
fun shouldCalculateCheerScore() {
assertEquals(0.6, RecommendationScoreSpec.CHEER_DONATION_AMOUNT_WEIGHT, 0.0001)
assertEquals(0.3, RecommendationScoreSpec.CHEER_FAN_TALK_WEIGHT, 0.0001)
assertEquals(0.1, RecommendationScoreSpec.CHEER_DONATION_COUNT_WEIGHT, 0.0001)
val score = policy.calculateCheerScore(
donationAmount = 1000,
fanTalkCount = 20,
@@ -72,6 +85,10 @@ class RecommendationScorePolicyTest {
@Test
@DisplayName("인기 커뮤니티 점수는 좋아요 수, 댓글 수, 팔로우 수에 가중치를 적용한다")
fun shouldCalculateCommunityScore() {
assertEquals(0.5, RecommendationScoreSpec.COMMUNITY_LIKE_WEIGHT, 0.0001)
assertEquals(0.5, RecommendationScoreSpec.COMMUNITY_COMMENT_WEIGHT, 0.0001)
assertEquals(0.1, RecommendationScoreSpec.COMMUNITY_FOLLOWER_WEIGHT, 0.0001)
val score = policy.calculateCommunityScore(
likeCount = 40,
commentCount = 20,