From a0375aa29c33b148f76b40e164f7406fd3deb709 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 23 Jun 2026 22:38:48 +0900 Subject: [PATCH] =?UTF-8?q?feat(content-preference):=20=EC=84=B1=EC=9D=B8?= =?UTF-8?q?=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=A1=B0=ED=9A=8C=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MemberContentPreferencePolicy.kt | 2 ++ .../MemberContentPreferenceService.kt | 4 ++++ .../MemberContentPreferenceServiceTest.kt | 17 +++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferencePolicy.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferencePolicy.kt index c848a0d6..221d38e3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferencePolicy.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferencePolicy.kt @@ -4,12 +4,14 @@ import kr.co.vividnext.sodalive.member.Member import org.springframework.web.context.request.RequestContextHolder import org.springframework.web.context.request.ServletRequestAttributes +@Deprecated("Use MemberContentPreferenceService.canViewAdultContent(member)") fun resolveCountryCodeByPolicy(member: Member): String { val requestAttributes = RequestContextHolder.getRequestAttributes() as? ServletRequestAttributes val requestCountryCode = requestAttributes?.request?.getHeader("CloudFront-Viewer-Country") return resolveCountryCodeWithForcedMapping(member, requestCountryCode) } +@Deprecated("Use MemberContentPreferenceService.canViewAdultContent(member)") fun isAdultVisibleByPolicy(member: Member, isAdultContentVisible: Boolean): Boolean { return if (resolveCountryCodeByPolicy(member) == "KR") { member.auth != null && isAdultContentVisible diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceService.kt index 4b73520a..df330621 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceService.kt @@ -153,6 +153,10 @@ class MemberContentPreferenceService( ) } + fun canViewAdultContent(member: Member): Boolean { + return getStoredPreference(member).isAdult + } + fun resolveCountryCode(member: Member): String { requireMemberId(member) return resolveCountryCodeWithForcedMapping(member, countryContext.countryCode) diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceServiceTest.kt index 5e1cd3f6..60a7c413 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceServiceTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceServiceTest.kt @@ -449,6 +449,23 @@ class MemberContentPreferenceServiceTest { assertTrue(service.calculateIsAdultForQuery(noAuthMember, "US", true)) } + @Test + @DisplayName("성인 콘텐츠 조회 가능 여부는 저장 preference의 조회용 성인 정책 결과를 반환한다") + fun shouldReturnStoredPreferenceAdultPolicyForCanViewAdultContent() { + val member = createMember(id = 2200L) + val preference = MemberContentPreference( + isAdultContentVisible = true, + contentType = ContentType.ALL, + adultContentVisibilityChangedAt = LocalDateTime.now().minusDays(1), + contentTypeChangedAt = LocalDateTime.now().minusDays(1) + ) + preference.member = member + countryContext.setCountryCode("KR") + Mockito.`when`(repository.findByMemberId(2200L)).thenReturn(preference) + + assertFalse(service.canViewAdultContent(member)) + } + @Test @DisplayName("직접 설정 API 입력이 모두 누락되면 예외를 발생시킨다") fun shouldThrowWhenAllPreferenceFieldsAreMissing() {