feat(content-preference): 성인 콘텐츠 조회 메서드를 추가한다

This commit is contained in:
2026-06-23 22:38:48 +09:00
parent 9987595fe2
commit a0375aa29c
3 changed files with 23 additions and 0 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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() {