fix(content-preference): 멤버 콘텐츠 선호 신규 생성 정책을 저장값 기준으로 정리한다

This commit is contained in:
2026-03-27 21:37:59 +09:00
parent a87bd147dc
commit ae68886bdb
4 changed files with 223 additions and 27 deletions

View File

@@ -23,6 +23,11 @@ class MemberContentPreferenceService(
private val countryContext: CountryContext,
private val cacheManager: CacheManager
) {
private data class PreferenceSeed(
val isAdultContentVisible: Boolean,
val contentType: ContentType
)
companion object {
private const val RECOMMEND_LIVE_CACHE_NAME = "cache_ttl_3_hours"
private const val RECOMMEND_LIVE_CACHE_KEY_PREFIX = "getRecommendLive:"
@@ -32,6 +37,19 @@ class MemberContentPreferenceService(
@Transactional
fun initializeDefaultPreference(member: Member): MemberContentPreference {
return initializeDefaultPreference(
member = member,
seed = PreferenceSeed(
isAdultContentVisible = false,
contentType = ContentType.ALL
)
)
}
private fun initializeDefaultPreference(
member: Member,
seed: PreferenceSeed
): MemberContentPreference {
val memberId = requireMemberId(member)
val existingPreference = repository.findByMemberId(memberId)
@@ -49,8 +67,8 @@ class MemberContentPreferenceService(
val now = LocalDateTime.now()
val preference = MemberContentPreference(
isAdultContentVisible = false,
contentType = ContentType.ALL,
isAdultContentVisible = seed.isAdultContentVisible,
contentType = seed.contentType,
adultContentVisibilityChangedAt = now,
contentTypeChangedAt = now
)
@@ -69,24 +87,15 @@ class MemberContentPreferenceService(
isAdultContentVisible: Boolean?,
contentType: ContentType?
): ViewerContentPreference {
val preference = initializeDefaultPreference(member)
val countryCode = resolveCountryCode(member)
val hasChanged = if (isAdultContentVisible != null || contentType != null) {
applyRequestValues(
preference = preference,
val preference = initializeDefaultPreference(
member = member,
seed = resolvePreferenceSeedForQuery(
member = member,
countryCode = countryCode,
isAdultContentVisible = isAdultContentVisible,
contentType = contentType
)
} else {
false
}
if (hasChanged) {
evictRecommendLiveCacheAfterCommit(requireMemberId(member))
}
)
val countryCode = resolveCountryCode(member)
return toViewerContentPreference(
countryCode = countryCode,
@@ -169,6 +178,24 @@ class MemberContentPreferenceService(
}
}
private fun resolvePreferenceSeedForQuery(
member: Member,
isAdultContentVisible: Boolean?,
contentType: ContentType?
): PreferenceSeed {
if (member.auth == null) {
return PreferenceSeed(
isAdultContentVisible = false,
contentType = ContentType.ALL
)
}
return PreferenceSeed(
isAdultContentVisible = isAdultContentVisible ?: true,
contentType = contentType ?: ContentType.ALL
)
}
private fun applyRequestValues(
preference: MemberContentPreference,
member: Member,