From b355253502353062ee8594aa490d9e276c80ffd7 Mon Sep 17 00:00:00 2001 From: Develop-KIM Date: Tue, 30 Jun 2026 16:03:03 +0900 Subject: [PATCH] =?UTF-8?q?feat(badge):=20=EB=B0=B0=EC=A7=80=20=EC=B9=B4?= =?UTF-8?q?=EC=9A=B4=ED=8A=B8=20=EB=B9=84=EC=86=8C=EA=B8=89=20-=20launch?= =?UTF-8?q?=20=EC=9D=B4=ED=9B=84=20=ED=9A=8C=EA=B3=A0=EB=A7=8C=20=EC=A7=91?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전(launch 전) 회고가 누적/주간 배지 조건에 소급 반영되던 문제 수정. achievement.feature-launched-at(설정, env 오버라이드) 이후 completedAt 회고만 countCompletedRetros / 주간 카운트에 반영. Co-Authored-By: Claude Opus 4.8 --- .../achievement/RetrospectAchievementReaderImpl.kt | 14 ++++++++++---- src/main/resources/application.yaml | 3 +++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/didit/adapter/persistence/achievement/RetrospectAchievementReaderImpl.kt b/src/main/kotlin/com/didit/adapter/persistence/achievement/RetrospectAchievementReaderImpl.kt index af1d7ce0..f446ae03 100644 --- a/src/main/kotlin/com/didit/adapter/persistence/achievement/RetrospectAchievementReaderImpl.kt +++ b/src/main/kotlin/com/didit/adapter/persistence/achievement/RetrospectAchievementReaderImpl.kt @@ -4,21 +4,23 @@ import com.didit.application.achievement.required.RetrospectAchievementReader import com.didit.application.retrospect.required.RetrospectiveRepository import com.didit.domain.retrospect.RetroStatus import com.didit.domain.shared.ServiceTime +import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Component import java.time.DayOfWeek import java.time.LocalDate +import java.time.LocalDateTime import java.util.UUID @Component class RetrospectAchievementReaderImpl( private val retrospectiveRepository: RetrospectiveRepository, + @Value("\${achievement.feature-launched-at:2026-06-30T00:00:00}") private val featureLaunchedAt: LocalDateTime, ) : RetrospectAchievementReader { companion object { private const val MAX_CONSECUTIVE_WEEKS_SCAN = 60 } - override fun countCompletedRetros(userId: UUID): Int = - retrospectiveRepository.countByUserIdAndStatusAndDeletedAtIsNull(userId, RetroStatus.COMPLETED) + override fun countCompletedRetros(userId: UUID): Int = completedAtsSinceLaunch(userId).size override fun countRetrosInWeek( userId: UUID, @@ -42,9 +44,13 @@ class RetrospectAchievementReaderImpl( } private fun weekCountsByMondayKst(userId: UUID): Map = - retrospectiveRepository - .findCompletedAtByUserIdAndStatusAndDeletedAtIsNull(userId, RetroStatus.COMPLETED) + completedAtsSinceLaunch(userId) .map { ServiceTime.toServiceDate(it) } .groupingBy { it.with(DayOfWeek.MONDAY) } .eachCount() + + private fun completedAtsSinceLaunch(userId: UUID): List = + retrospectiveRepository + .findCompletedAtByUserIdAndStatusAndDeletedAtIsNull(userId, RetroStatus.COMPLETED) + .filter { !it.isBefore(featureLaunchedAt) } } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index dd69ed63..f951941b 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -43,6 +43,9 @@ jwt: access-token-expiry-ms: 3600000 refresh-token-expiry-days: 14 +achievement: + feature-launched-at: ${ACHIEVEMENT_FEATURE_LAUNCHED_AT:2026-06-30T00:00:00} + clova: api: url: https://clovastudio.stream.ntruss.com/v3/chat-completions/HCX-005