test #410
102
docs/20260327_멤버콘텐츠선호기본값조정.md
Normal file
102
docs/20260327_멤버콘텐츠선호기본값조정.md
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
# 20260327 멤버 콘텐츠 선호 기본값 조정
|
||||||
|
|
||||||
|
## 목적
|
||||||
|
- `MemberContentPreference` 신규 생성 기본값을 다음 정책으로 고정한다.
|
||||||
|
- 기존 회원 + `member.auth != null` 인 경우: `isAdultContentVisible = true`, `contentType = ContentType.ALL`
|
||||||
|
- 그 외: `isAdultContentVisible = false`, `contentType = ContentType.ALL`
|
||||||
|
|
||||||
|
## 구현 체크리스트
|
||||||
|
- [x] 기본값 시드 로직을 `member.auth` 기준 정책으로 단순화한다.
|
||||||
|
- QA: row 미존재 + 인증/미인증 케이스에서 저장값이 각각 `true/ALL`, `false/ALL`인지 테스트로 확인
|
||||||
|
- [x] 레거시 조회 파라미터(`isAdultContentVisible`, `contentType`)가 신규 row 기본값에 영향을 주지 않도록 정리한다.
|
||||||
|
- QA: `resolveForQuery` 호출 시 파라미터 전달 여부와 무관하게 정책 기본값으로 생성되는지 확인
|
||||||
|
- [x] 관련 단위/통합 테스트 기대값을 정책에 맞게 수정한다.
|
||||||
|
- QA: `MemberContentPreferenceServiceTest`, `MemberContentPreferenceIntegrationTest` 통과
|
||||||
|
- [x] 회귀 검증을 실행한다.
|
||||||
|
- QA: `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`, `./gradlew build` 성공
|
||||||
|
|
||||||
|
## 구현 완료 후 기록
|
||||||
|
### 1차 구현
|
||||||
|
- 무엇을:
|
||||||
|
- `MemberContentPreferenceService.initializeDefaultPreference`의 기본 seed를 `member.auth != null` 기준으로 변경해 인증 회원은 `true/ALL`, 그 외는 `false/ALL`로 생성되도록 수정했다.
|
||||||
|
- `resolveForQuery`의 신규 row 생성 seed 계산에서 legacy 파라미터를 제거하고 `member.auth` 기반 고정 정책(`true/ALL` 또는 `false/ALL`)만 사용하도록 정리했다.
|
||||||
|
- `MemberContentPreferenceServiceTest`, `MemberContentPreferenceIntegrationTest`의 관련 시나리오를 정책에 맞게 수정했다.
|
||||||
|
- 왜:
|
||||||
|
- 요청사항이 “기존 회원가입 + `member.auth != null`이면 `true/ALL`, 그 외는 `false/ALL`”로 명확하여, 신규 row 기본값이 요청 파라미터에 영향을 받지 않도록 일관된 기준으로 통일해야 했기 때문이다.
|
||||||
|
- 어떻게:
|
||||||
|
- 명령:
|
||||||
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest.shouldSeedPreferenceToTrueAndAllWhenRowMissingAndAuthenticatedRegardlessOfLegacyParams"`
|
||||||
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
||||||
|
- `./gradlew build`
|
||||||
|
- 결과:
|
||||||
|
- 정책 핵심 시나리오 단일 테스트 통과.
|
||||||
|
- 대상 단위/통합 테스트 통과.
|
||||||
|
- 전체 build(테스트/ktlint 포함) 통과.
|
||||||
|
- `.kt` 확장자용 LSP 서버가 현재 환경에 없어 `lsp_diagnostics`는 실행 불가였고, 대신 Gradle 검증으로 정합성을 확인했다.
|
||||||
|
|
||||||
|
## 연계 작업(동일 기능)
|
||||||
|
### 2차 구현 - `resolveForQuery` 조회 파라미터 제거
|
||||||
|
- 무엇을:
|
||||||
|
- `MemberContentPreferenceService.resolveForQuery` 시그니처에서 미사용 파라미터 2개
|
||||||
|
(`isAdultContentVisible`, `contentType`)를 제거하고 `member` 단일 파라미터로 정리했다.
|
||||||
|
- 시그니처 변경에 맞춰 서비스/컨트롤러/테스트의 `resolveForQuery` 호출부 인자 전달 코드를 일괄 정리했다.
|
||||||
|
- 왜:
|
||||||
|
- 실제로 사용되지 않는 파라미터를 제거해 함수 계약을 단순화하고, 호출부 가독성과 유지보수성을 높이기 위해서다.
|
||||||
|
- 어떻게:
|
||||||
|
- 명령:
|
||||||
|
- `./gradlew compileKotlin compileTestKotlin`
|
||||||
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
||||||
|
- `./gradlew build`
|
||||||
|
- `lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")`
|
||||||
|
- 결과:
|
||||||
|
- 시그니처 변경 직후 컴파일 에러로 표시된 호출부를 모두 정리한 뒤 `compileKotlin/compileTestKotlin` 성공.
|
||||||
|
- 관련 단위/통합 테스트 통과.
|
||||||
|
- 전체 build(ktlint/test 포함) 성공.
|
||||||
|
- 현재 환경에는 Kotlin LSP 서버가 없어 `lsp_diagnostics`는 실행 불가였고,
|
||||||
|
Gradle 컴파일/테스트/빌드로 정합성을 확인했다.
|
||||||
|
|
||||||
|
### 3차 구현 - 수정 파일 미사용 파라미터 정리
|
||||||
|
- 무엇을:
|
||||||
|
- `resolveForQuery(member = member)`로 단순화된 이후 미사용 상태가 된
|
||||||
|
`resolvePreference` 헬퍼 파라미터를 12개 파일에서 제거했다.
|
||||||
|
- 헬퍼 호출부를 정리했고, null 회원 분기에서 실제로 파라미터를 사용하는 서비스/컨트롤러
|
||||||
|
(`HomeService`, `LiveApiService`, `AudioContentController`, `AudioContentMainTabHomeController`)는
|
||||||
|
기존 전달 로직을 유지했다.
|
||||||
|
- 왜:
|
||||||
|
- 사용되지 않는 파라미터는 경고와 혼선을 유발해 유지보수 비용을 높이므로,
|
||||||
|
실제 사용하는 함수 계약만 남겨 코드 의도를 명확히 하기 위해서다.
|
||||||
|
- 어떻게:
|
||||||
|
- 명령:
|
||||||
|
- `./gradlew compileKotlin`
|
||||||
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
||||||
|
- `./gradlew build`
|
||||||
|
- `lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")`
|
||||||
|
- 결과:
|
||||||
|
- `compileKotlin` 성공.
|
||||||
|
- 관련 단위/통합 테스트 성공.
|
||||||
|
- 전체 build(ktlint/test 포함) 성공.
|
||||||
|
- 현재 환경에 Kotlin LSP 서버가 없어 `lsp_diagnostics`는 실행 불가였고,
|
||||||
|
Gradle 컴파일/테스트/빌드 결과로 정합성을 확인했다.
|
||||||
|
|
||||||
|
### 4차 수정 - 잔여 미사용 파라미터 추가 정리
|
||||||
|
- 무엇을:
|
||||||
|
- 3차 정리 이후에도 남아 있던 수정 파일 내 함수 미사용 파라미터를 추가 제거했다.
|
||||||
|
- `resolvePreference(member: Member)`만 사용하는 컨트롤러들의
|
||||||
|
`@RequestParam("isAdultContentVisible")`, `@RequestParam("contentType")`를 제거하고 import를 정리했다.
|
||||||
|
- `ExplorerService.getCreatorProfile`의 미사용 파라미터 `isAdultContentVisible`을 제거하고
|
||||||
|
`ExplorerController` 호출부를 함께 수정했다.
|
||||||
|
- 왜:
|
||||||
|
- 실제 로직에서 사용되지 않는 파라미터를 제거해 함수 계약을 단순화하고,
|
||||||
|
유지보수 시 혼선을 줄이기 위해서다.
|
||||||
|
- 어떻게:
|
||||||
|
- 명령:
|
||||||
|
- `./gradlew compileKotlin compileTestKotlin`
|
||||||
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
||||||
|
- `./gradlew build`
|
||||||
|
- `lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")`
|
||||||
|
- 결과:
|
||||||
|
- `compileKotlin`, `compileTestKotlin` 성공.
|
||||||
|
- 관련 단위/통합 테스트 성공.
|
||||||
|
- 전체 build(ktlint/test 포함) 성공.
|
||||||
|
- 현재 환경에 Kotlin LSP 서버가 없어 `lsp_diagnostics`는 실행 불가였고,
|
||||||
|
Gradle 검증으로 정합성을 확인했다.
|
||||||
@@ -405,11 +405,7 @@ class HomeService(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return memberContentPreferenceService.resolveForQuery(
|
return memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun pickByTimeDecay(
|
private fun pickByTimeDecay(
|
||||||
|
|||||||
@@ -112,10 +112,6 @@ class LiveApiService(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return memberContentPreferenceService.resolveForQuery(
|
return memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -306,10 +306,6 @@ class AudioContentController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return memberContentPreferenceService.resolveForQuery(
|
return memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.content.order.OrderService
|
import kr.co.vividnext.sodalive.content.order.OrderService
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
@@ -25,7 +24,7 @@ class AudioContentMainController(
|
|||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, null, null)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getNewContentUploadCreatorList(
|
service.getNewContentUploadCreatorList(
|
||||||
@@ -40,7 +39,7 @@ class AudioContentMainController(
|
|||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, null, null)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getAudioContentMainBannerList(
|
service.getAudioContentMainBannerList(
|
||||||
@@ -67,13 +66,11 @@ class AudioContentMainController(
|
|||||||
@GetMapping("/new")
|
@GetMapping("/new")
|
||||||
fun getNewContentByTheme(
|
fun getNewContentByTheme(
|
||||||
@RequestParam("theme") theme: String,
|
@RequestParam("theme") theme: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getNewContentByTheme(
|
service.getNewContentByTheme(
|
||||||
@@ -88,12 +85,10 @@ class AudioContentMainController(
|
|||||||
|
|
||||||
@GetMapping("/theme")
|
@GetMapping("/theme")
|
||||||
fun getThemeList(
|
fun getThemeList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getThemeList(
|
service.getThemeList(
|
||||||
@@ -106,13 +101,11 @@ class AudioContentMainController(
|
|||||||
@GetMapping("/new/all")
|
@GetMapping("/new/all")
|
||||||
fun getNewContentAllByTheme(
|
fun getNewContentAllByTheme(
|
||||||
@RequestParam("theme") theme: String,
|
@RequestParam("theme") theme: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getNewContentFor2WeeksByTheme(
|
service.getNewContentFor2WeeksByTheme(
|
||||||
@@ -127,13 +120,11 @@ class AudioContentMainController(
|
|||||||
|
|
||||||
@GetMapping("/curation-list")
|
@GetMapping("/curation-list")
|
||||||
fun getCurationList(
|
fun getCurationList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getAudioContentCurationListWithPaging(
|
service.getAudioContentCurationListWithPaging(
|
||||||
@@ -146,13 +137,5 @@ class AudioContentMainController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.curation
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.content.SortType
|
import kr.co.vividnext.sodalive.content.SortType
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
@@ -23,14 +22,12 @@ class AudioContentCurationController(
|
|||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
fun getCurationContent(
|
fun getCurationContent(
|
||||||
@PathVariable id: Long,
|
@PathVariable id: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST,
|
@RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST,
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getCurationContent(
|
service.getCurationContent(
|
||||||
@@ -44,13 +41,5 @@ class AudioContentCurationController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.tab.alarm
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
@@ -20,12 +19,10 @@ class AudioContentMainTabAlarmController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchContentMainTabAlarm(
|
fun fetchContentMainTabAlarm(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchData(
|
service.fetchData(
|
||||||
@@ -39,13 +36,11 @@ class AudioContentMainTabAlarmController(
|
|||||||
@GetMapping("/all")
|
@GetMapping("/all")
|
||||||
fun fetchAlarmContentByTheme(
|
fun fetchAlarmContentByTheme(
|
||||||
@RequestParam("theme") theme: String,
|
@RequestParam("theme") theme: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchAlarmContentByTheme(
|
service.fetchAlarmContentByTheme(
|
||||||
@@ -59,13 +54,5 @@ class AudioContentMainTabAlarmController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.tab.asmr
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||||
@@ -19,12 +18,10 @@ class AudioContentMainTabAsmrController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchContentMainTabAsmr(
|
fun fetchContentMainTabAsmr(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchData(
|
service.fetchData(
|
||||||
@@ -38,12 +35,10 @@ class AudioContentMainTabAsmrController(
|
|||||||
@GetMapping("/popular-content-by-creator")
|
@GetMapping("/popular-content-by-creator")
|
||||||
fun getPopularContentByCreator(
|
fun getPopularContentByCreator(
|
||||||
@RequestParam creatorId: Long,
|
@RequestParam creatorId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getPopularContentByCreator(
|
service.getPopularContentByCreator(
|
||||||
@@ -54,13 +49,5 @@ class AudioContentMainTabAsmrController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.tab.content
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
@@ -20,12 +19,10 @@ class AudioContentMainTabContentController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchContentMainTabContent(
|
fun fetchContentMainTabContent(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchData(
|
service.fetchData(
|
||||||
@@ -39,13 +36,11 @@ class AudioContentMainTabContentController(
|
|||||||
@GetMapping("/ranking")
|
@GetMapping("/ranking")
|
||||||
fun getAudioContentRanking(
|
fun getAudioContentRanking(
|
||||||
@RequestParam("sort-type", required = false) sortType: String?,
|
@RequestParam("sort-type", required = false) sortType: String?,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getAudioContentRanking(
|
service.getAudioContentRanking(
|
||||||
@@ -60,13 +55,11 @@ class AudioContentMainTabContentController(
|
|||||||
@GetMapping("/new-content-by-theme")
|
@GetMapping("/new-content-by-theme")
|
||||||
fun getNewContentByTheme(
|
fun getNewContentByTheme(
|
||||||
@RequestParam("theme") theme: String,
|
@RequestParam("theme") theme: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getNewContentByTheme(
|
service.getNewContentByTheme(
|
||||||
@@ -81,12 +74,10 @@ class AudioContentMainTabContentController(
|
|||||||
@GetMapping("/popular-content-by-creator")
|
@GetMapping("/popular-content-by-creator")
|
||||||
fun getPopularContentByCreator(
|
fun getPopularContentByCreator(
|
||||||
@RequestParam creatorId: Long,
|
@RequestParam creatorId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getPopularContentByCreator(
|
service.getPopularContentByCreator(
|
||||||
@@ -100,12 +91,10 @@ class AudioContentMainTabContentController(
|
|||||||
@GetMapping("/recommend-content-by-tag")
|
@GetMapping("/recommend-content-by-tag")
|
||||||
fun getRecommendedContentByTag(
|
fun getRecommendedContentByTag(
|
||||||
@RequestParam tag: String,
|
@RequestParam tag: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getRecommendedContentByTag(
|
service.getRecommendedContentByTag(
|
||||||
memberId = member.id!!,
|
memberId = member.id!!,
|
||||||
@@ -116,13 +105,5 @@ class AudioContentMainTabContentController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.tab.free
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
@@ -20,12 +19,10 @@ class AudioContentMainTabFreeController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchContentMainFree(
|
fun fetchContentMainFree(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchData(
|
service.fetchData(
|
||||||
@@ -38,13 +35,11 @@ class AudioContentMainTabFreeController(
|
|||||||
|
|
||||||
@GetMapping("/introduce-creator")
|
@GetMapping("/introduce-creator")
|
||||||
fun getIntroduceCreator(
|
fun getIntroduceCreator(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getIntroduceCreator(
|
service.getIntroduceCreator(
|
||||||
@@ -60,13 +55,11 @@ class AudioContentMainTabFreeController(
|
|||||||
@GetMapping("/new-content-by-theme")
|
@GetMapping("/new-content-by-theme")
|
||||||
fun getNewContentByTheme(
|
fun getNewContentByTheme(
|
||||||
@RequestParam("theme") theme: String,
|
@RequestParam("theme") theme: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getNewContentByTheme(
|
service.getNewContentByTheme(
|
||||||
@@ -83,12 +76,10 @@ class AudioContentMainTabFreeController(
|
|||||||
@GetMapping("/popular-content-by-creator")
|
@GetMapping("/popular-content-by-creator")
|
||||||
fun getPopularContentByCreator(
|
fun getPopularContentByCreator(
|
||||||
@RequestParam creatorId: Long,
|
@RequestParam creatorId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getPopularContentByCreator(
|
service.getPopularContentByCreator(
|
||||||
@@ -99,13 +90,5 @@ class AudioContentMainTabFreeController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,10 +82,6 @@ class AudioContentMainTabHomeController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return memberContentPreferenceService.resolveForQuery(
|
return memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.tab.replay
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||||
@@ -19,12 +18,10 @@ class AudioContentMainTabLiveReplayController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchContentMainTabLiveReplay(
|
fun fetchContentMainTabLiveReplay(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchData(
|
service.fetchData(
|
||||||
@@ -38,12 +35,10 @@ class AudioContentMainTabLiveReplayController(
|
|||||||
@GetMapping("/popular-content-by-creator")
|
@GetMapping("/popular-content-by-creator")
|
||||||
fun getPopularContentByCreator(
|
fun getPopularContentByCreator(
|
||||||
@RequestParam creatorId: Long,
|
@RequestParam creatorId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getPopularContentByCreator(
|
service.getPopularContentByCreator(
|
||||||
@@ -54,13 +49,5 @@ class AudioContentMainTabLiveReplayController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.main.tab.series
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
@@ -20,12 +19,10 @@ class AudioContentMainTabSeriesController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchContentMainSeries(
|
fun fetchContentMainSeries(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.fetchData(
|
service.fetchData(
|
||||||
@@ -38,13 +35,11 @@ class AudioContentMainTabSeriesController(
|
|||||||
|
|
||||||
@GetMapping("/original")
|
@GetMapping("/original")
|
||||||
fun getOriginalAudioDramaList(
|
fun getOriginalAudioDramaList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getOriginalAudioDramaList(
|
service.getOriginalAudioDramaList(
|
||||||
@@ -59,13 +54,11 @@ class AudioContentMainTabSeriesController(
|
|||||||
|
|
||||||
@GetMapping("/completed-rank")
|
@GetMapping("/completed-rank")
|
||||||
fun getRank10DaysCompletedSeriesList(
|
fun getRank10DaysCompletedSeriesList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getRank10DaysCompletedSeriesList(
|
service.getRank10DaysCompletedSeriesList(
|
||||||
@@ -81,12 +74,10 @@ class AudioContentMainTabSeriesController(
|
|||||||
@GetMapping("/recommend-by-genre")
|
@GetMapping("/recommend-by-genre")
|
||||||
fun getRecommendSeriesListByGenre(
|
fun getRecommendSeriesListByGenre(
|
||||||
@RequestParam genreId: Long,
|
@RequestParam genreId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getRecommendSeriesListByGenre(
|
service.getRecommendSeriesListByGenre(
|
||||||
@@ -101,12 +92,10 @@ class AudioContentMainTabSeriesController(
|
|||||||
@GetMapping("/recommend-series-by-creator")
|
@GetMapping("/recommend-series-by-creator")
|
||||||
fun getRecommendSeriesByCreator(
|
fun getRecommendSeriesByCreator(
|
||||||
@RequestParam creatorId: Long,
|
@RequestParam creatorId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getRecommendSeriesByCreator(
|
service.getRecommendSeriesByCreator(
|
||||||
@@ -117,13 +106,5 @@ class AudioContentMainTabSeriesController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.series
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesSortType
|
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesSortType
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
@@ -25,13 +24,11 @@ class ContentSeriesController(
|
|||||||
@RequestParam(required = false) creatorId: Long?,
|
@RequestParam(required = false) creatorId: Long?,
|
||||||
@RequestParam(name = "isOriginal", required = false) isOriginal: Boolean? = null,
|
@RequestParam(name = "isOriginal", required = false) isOriginal: Boolean? = null,
|
||||||
@RequestParam(name = "isCompleted", required = false) isCompleted: Boolean? = null,
|
@RequestParam(name = "isCompleted", required = false) isCompleted: Boolean? = null,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getSeriesList(
|
service.getSeriesList(
|
||||||
@@ -50,12 +47,10 @@ class ContentSeriesController(
|
|||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
fun getSeriesDetail(
|
fun getSeriesDetail(
|
||||||
@PathVariable id: Long,
|
@PathVariable id: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getSeriesDetail(
|
service.getSeriesDetail(
|
||||||
@@ -71,13 +66,11 @@ class ContentSeriesController(
|
|||||||
fun getSeriesContentList(
|
fun getSeriesContentList(
|
||||||
@PathVariable id: Long,
|
@PathVariable id: Long,
|
||||||
@RequestParam("sortType", required = false) sortType: SeriesSortType? = SeriesSortType.NEWEST,
|
@RequestParam("sortType", required = false) sortType: SeriesSortType? = SeriesSortType.NEWEST,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getSeriesContentList(
|
service.getSeriesContentList(
|
||||||
@@ -94,12 +87,10 @@ class ContentSeriesController(
|
|||||||
|
|
||||||
@GetMapping("/recommend")
|
@GetMapping("/recommend")
|
||||||
fun getRecommendSeriesList(
|
fun getRecommendSeriesList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getRecommendSeriesList(
|
service.getRecommendSeriesList(
|
||||||
@@ -110,13 +101,5 @@ class ContentSeriesController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package kr.co.vividnext.sodalive.content.series.main
|
|||||||
import kr.co.vividnext.sodalive.admin.content.series.banner.dto.SeriesBannerResponse
|
import kr.co.vividnext.sodalive.admin.content.series.banner.dto.SeriesBannerResponse
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.content.series.ContentSeriesService
|
import kr.co.vividnext.sodalive.content.series.ContentSeriesService
|
||||||
import kr.co.vividnext.sodalive.content.series.main.banner.ContentSeriesBannerService
|
import kr.co.vividnext.sodalive.content.series.main.banner.ContentSeriesBannerService
|
||||||
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek
|
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek
|
||||||
@@ -29,12 +28,10 @@ class SeriesMainController(
|
|||||||
) {
|
) {
|
||||||
@GetMapping
|
@GetMapping
|
||||||
fun fetchData(
|
fun fetchData(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
val banners = bannerService.getActiveBanners(PageRequest.of(0, 10))
|
val banners = bannerService.getActiveBanners(PageRequest.of(0, 10))
|
||||||
.content
|
.content
|
||||||
@@ -69,12 +66,10 @@ class SeriesMainController(
|
|||||||
|
|
||||||
@GetMapping("/recommend")
|
@GetMapping("/recommend")
|
||||||
fun getRecommendSeriesList(
|
fun getRecommendSeriesList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
contentSeriesService.getRecommendSeriesList(
|
contentSeriesService.getRecommendSeriesList(
|
||||||
@@ -88,14 +83,12 @@ class SeriesMainController(
|
|||||||
@GetMapping("/day-of-week")
|
@GetMapping("/day-of-week")
|
||||||
fun getDayOfWeekSeriesList(
|
fun getDayOfWeekSeriesList(
|
||||||
@RequestParam("dayOfWeek") dayOfWeek: SeriesPublishedDaysOfWeek,
|
@RequestParam("dayOfWeek") dayOfWeek: SeriesPublishedDaysOfWeek,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@RequestParam(defaultValue = "0") page: Int,
|
@RequestParam(defaultValue = "0") page: Int,
|
||||||
@RequestParam(defaultValue = "20") size: Int,
|
@RequestParam(defaultValue = "20") size: Int,
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
val pageable = PageRequest.of(page, size)
|
val pageable = PageRequest.of(page, size)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
@@ -112,12 +105,10 @@ class SeriesMainController(
|
|||||||
|
|
||||||
@GetMapping("/genre-list")
|
@GetMapping("/genre-list")
|
||||||
fun getGenreList(
|
fun getGenreList(
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
val memberId = member.id!!
|
val memberId = member.id!!
|
||||||
val isAdult = preference.isAdult
|
val isAdult = preference.isAdult
|
||||||
@@ -134,14 +125,12 @@ class SeriesMainController(
|
|||||||
@GetMapping("/list-by-genre")
|
@GetMapping("/list-by-genre")
|
||||||
fun getSeriesListByGenre(
|
fun getSeriesListByGenre(
|
||||||
@RequestParam("genreId") genreId: Long,
|
@RequestParam("genreId") genreId: Long,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@RequestParam(defaultValue = "0") page: Int,
|
@RequestParam(defaultValue = "0") page: Int,
|
||||||
@RequestParam(defaultValue = "20") size: Int,
|
@RequestParam(defaultValue = "20") size: Int,
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
val pageable = PageRequest.of(page, size)
|
val pageable = PageRequest.of(page, size)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
@@ -156,13 +145,5 @@ class SeriesMainController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.content.theme
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.content.SortType
|
import kr.co.vividnext.sodalive.content.SortType
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
@@ -35,12 +34,10 @@ class AudioContentThemeController(
|
|||||||
fun getActiveThemes(
|
fun getActiveThemes(
|
||||||
@RequestParam("isFree", required = false) isFree: Boolean? = null,
|
@RequestParam("isFree", required = false) isFree: Boolean? = null,
|
||||||
@RequestParam("isPointAvailableOnly", required = false) isPointAvailableOnly: Boolean? = null,
|
@RequestParam("isPointAvailableOnly", required = false) isPointAvailableOnly: Boolean? = null,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getActiveThemeOfContent(
|
service.getActiveThemeOfContent(
|
||||||
@@ -56,13 +53,11 @@ class AudioContentThemeController(
|
|||||||
fun getContentByTheme(
|
fun getContentByTheme(
|
||||||
@PathVariable id: Long,
|
@PathVariable id: Long,
|
||||||
@RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST,
|
@RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
|
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.getContentByTheme(
|
service.getContentByTheme(
|
||||||
@@ -77,13 +72,5 @@ class AudioContentThemeController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ class ExplorerController(
|
|||||||
fun getCreatorProfile(
|
fun getCreatorProfile(
|
||||||
@PathVariable("id") creatorId: Long,
|
@PathVariable("id") creatorId: Long,
|
||||||
@RequestParam timezone: String,
|
@RequestParam timezone: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
@@ -67,7 +66,6 @@ class ExplorerController(
|
|||||||
service.getCreatorProfile(
|
service.getCreatorProfile(
|
||||||
creatorId = creatorId,
|
creatorId = creatorId,
|
||||||
timezone = timezone,
|
timezone = timezone,
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
member = member
|
member = member
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -258,14 +258,9 @@ class ExplorerService(
|
|||||||
fun getCreatorProfile(
|
fun getCreatorProfile(
|
||||||
creatorId: Long,
|
creatorId: Long,
|
||||||
timezone: String,
|
timezone: String,
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
member: Member
|
member: Member
|
||||||
): GetCreatorProfileResponse {
|
): GetCreatorProfileResponse {
|
||||||
val preference = memberContentPreferenceService.resolveForQuery(
|
val preference = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = null
|
|
||||||
)
|
|
||||||
|
|
||||||
// 크리에이터(유저) 정보
|
// 크리에이터(유저) 정보
|
||||||
val creatorAccount = queryRepository.getMember(creatorId)
|
val creatorAccount = queryRepository.getMember(creatorId)
|
||||||
|
|||||||
@@ -1480,11 +1480,7 @@ class LiveRoomService(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return memberContentPreferenceService.resolveForQuery(
|
return memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = null
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class MemberContentPreferenceService(
|
|||||||
return initializeDefaultPreference(
|
return initializeDefaultPreference(
|
||||||
member = member,
|
member = member,
|
||||||
seed = PreferenceSeed(
|
seed = PreferenceSeed(
|
||||||
isAdultContentVisible = false,
|
isAdultContentVisible = member.auth != null,
|
||||||
contentType = ContentType.ALL
|
contentType = ContentType.ALL
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -82,18 +82,10 @@ class MemberContentPreferenceService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||||
fun resolveForQuery(
|
fun resolveForQuery(member: Member): ViewerContentPreference {
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
): ViewerContentPreference {
|
|
||||||
val preference = initializeDefaultPreference(
|
val preference = initializeDefaultPreference(
|
||||||
member = member,
|
member = member,
|
||||||
seed = resolvePreferenceSeedForQuery(
|
seed = resolvePreferenceSeedForQuery(member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
val countryCode = resolveCountryCode(member)
|
val countryCode = resolveCountryCode(member)
|
||||||
|
|
||||||
@@ -178,21 +170,10 @@ class MemberContentPreferenceService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreferenceSeedForQuery(
|
private fun resolvePreferenceSeedForQuery(member: Member): PreferenceSeed {
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
): PreferenceSeed {
|
|
||||||
if (member.auth == null) {
|
|
||||||
return PreferenceSeed(
|
|
||||||
isAdultContentVisible = false,
|
|
||||||
contentType = ContentType.ALL
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return PreferenceSeed(
|
return PreferenceSeed(
|
||||||
isAdultContentVisible = isAdultContentVisible ?: true,
|
isAdultContentVisible = member.auth != null,
|
||||||
contentType = contentType ?: ContentType.ALL
|
contentType = ContentType.ALL
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.search
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceService
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
@@ -21,12 +20,10 @@ class SearchController(
|
|||||||
@GetMapping
|
@GetMapping
|
||||||
fun searchUnified(
|
fun searchUnified(
|
||||||
@RequestParam keyword: String,
|
@RequestParam keyword: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.searchUnified(
|
service.searchUnified(
|
||||||
keyword,
|
keyword,
|
||||||
@@ -57,13 +54,11 @@ class SearchController(
|
|||||||
@GetMapping("/contents")
|
@GetMapping("/contents")
|
||||||
fun searchContentList(
|
fun searchContentList(
|
||||||
@RequestParam keyword: String,
|
@RequestParam keyword: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.searchContentList(
|
service.searchContentList(
|
||||||
keyword,
|
keyword,
|
||||||
@@ -79,13 +74,11 @@ class SearchController(
|
|||||||
@GetMapping("/series")
|
@GetMapping("/series")
|
||||||
fun searchSeriesList(
|
fun searchSeriesList(
|
||||||
@RequestParam keyword: String,
|
@RequestParam keyword: String,
|
||||||
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
|
|
||||||
@RequestParam("contentType", required = false) contentType: ContentType? = null,
|
|
||||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||||
pageable: Pageable
|
pageable: Pageable
|
||||||
) = run {
|
) = run {
|
||||||
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
|
||||||
val preference = resolvePreference(member, isAdultContentVisible, contentType)
|
val preference = resolvePreference(member)
|
||||||
ApiResponse.ok(
|
ApiResponse.ok(
|
||||||
service.searchSeriesList(
|
service.searchSeriesList(
|
||||||
keyword,
|
keyword,
|
||||||
@@ -98,13 +91,5 @@ class SearchController(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolvePreference(
|
private fun resolvePreference(member: Member) = memberContentPreferenceService.resolveForQuery(member = member)
|
||||||
member: Member,
|
|
||||||
isAdultContentVisible: Boolean?,
|
|
||||||
contentType: ContentType?
|
|
||||||
) = memberContentPreferenceService.resolveForQuery(
|
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = isAdultContentVisible,
|
|
||||||
contentType = contentType
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,11 +54,7 @@ class MemberContentPreferenceIntegrationTest @Autowired constructor(
|
|||||||
|
|
||||||
assertEquals(null, preferenceRepository.findByMemberId(member.id!!))
|
assertEquals(null, preferenceRepository.findByMemberId(member.id!!))
|
||||||
|
|
||||||
val resolved = service.resolveForQuery(
|
val resolved = service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.MALE
|
|
||||||
)
|
|
||||||
val stored = service.getStoredPreference(member)
|
val stored = service.getStoredPreference(member)
|
||||||
|
|
||||||
assertNotNull(preferenceRepository.findByMemberId(member.id!!))
|
assertNotNull(preferenceRepository.findByMemberId(member.id!!))
|
||||||
@@ -81,11 +77,7 @@ class MemberContentPreferenceIntegrationTest @Autowired constructor(
|
|||||||
|
|
||||||
assertEquals(null, preferenceRepository.findByMemberId(member.id!!))
|
assertEquals(null, preferenceRepository.findByMemberId(member.id!!))
|
||||||
|
|
||||||
val resolved = service.resolveForQuery(
|
val resolved = service.resolveForQuery(member = reloadedMember)
|
||||||
member = reloadedMember,
|
|
||||||
isAdultContentVisible = null,
|
|
||||||
contentType = null
|
|
||||||
)
|
|
||||||
val stored = service.getStoredPreference(reloadedMember)
|
val stored = service.getStoredPreference(reloadedMember)
|
||||||
|
|
||||||
assertNotNull(preferenceRepository.findByMemberId(member.id!!))
|
assertNotNull(preferenceRepository.findByMemberId(member.id!!))
|
||||||
@@ -123,11 +115,7 @@ class MemberContentPreferenceIntegrationTest @Autowired constructor(
|
|||||||
val member = saveNonForcedMember("kr-unauth-user")
|
val member = saveNonForcedMember("kr-unauth-user")
|
||||||
countryContext.setCountryCode(null)
|
countryContext.setCountryCode(null)
|
||||||
|
|
||||||
val resolved = service.resolveForQuery(
|
val resolved = service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.MALE
|
|
||||||
)
|
|
||||||
val stored = service.getStoredPreference(member)
|
val stored = service.getStoredPreference(member)
|
||||||
|
|
||||||
assertEquals("KR", resolved.countryCode)
|
assertEquals("KR", resolved.countryCode)
|
||||||
@@ -139,22 +127,18 @@ class MemberContentPreferenceIntegrationTest @Autowired constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("KR + 인증 사용자는 요청값이 저장되고 성인 조회값(isAdult)이 true로 계산된다")
|
@DisplayName("KR + 인증 사용자는 legacy 파라미터와 무관하게 true/ALL로 생성되고 isAdult가 true로 계산된다")
|
||||||
fun shouldApplyRequestValuesForKrAuthenticatedMember() {
|
fun shouldCreateTrueAndAllForKrAuthenticatedMemberRegardlessOfLegacyParams() {
|
||||||
val member = saveNonForcedMember("kr-auth-user")
|
val member = saveNonForcedMember("kr-auth-user")
|
||||||
countryContext.setCountryCode(null)
|
countryContext.setCountryCode(null)
|
||||||
saveAuth(member)
|
saveAuth(member)
|
||||||
|
|
||||||
val reloadedMember = memberRepository.findById(member.id!!).orElseThrow()
|
val reloadedMember = memberRepository.findById(member.id!!).orElseThrow()
|
||||||
val resolved = service.resolveForQuery(
|
val resolved = service.resolveForQuery(member = reloadedMember)
|
||||||
member = reloadedMember,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.FEMALE
|
|
||||||
)
|
|
||||||
|
|
||||||
assertEquals("KR", resolved.countryCode)
|
assertEquals("KR", resolved.countryCode)
|
||||||
assertTrue(resolved.isAdultContentVisible)
|
assertTrue(resolved.isAdultContentVisible)
|
||||||
assertEquals(ContentType.FEMALE, resolved.contentType)
|
assertEquals(ContentType.ALL, resolved.contentType)
|
||||||
assertTrue(resolved.isAdult)
|
assertTrue(resolved.isAdult)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,11 +156,7 @@ class MemberContentPreferenceIntegrationTest @Autowired constructor(
|
|||||||
contentType = ContentType.FEMALE
|
contentType = ContentType.FEMALE
|
||||||
)
|
)
|
||||||
|
|
||||||
val resolved = service.resolveForQuery(
|
val resolved = service.resolveForQuery(member = reloadedMember)
|
||||||
member = reloadedMember,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.MALE
|
|
||||||
)
|
|
||||||
val stored = service.getStoredPreference(reloadedMember)
|
val stored = service.getStoredPreference(reloadedMember)
|
||||||
|
|
||||||
assertFalse(resolved.isAdultContentVisible)
|
assertFalse(resolved.isAdultContentVisible)
|
||||||
|
|||||||
@@ -258,8 +258,8 @@ class MemberContentPreferenceServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("row 미존재 + 인증 사용자의 legacy 조회 파라미터는 초기 생성값으로 반영된다")
|
@DisplayName("row 미존재 + 인증 사용자는 legacy 파라미터와 무관하게 true/ALL로 초기 생성된다")
|
||||||
fun shouldSeedPreferenceFromLegacyParamsWhenRowMissingAndAuthenticated() {
|
fun shouldSeedPreferenceToTrueAndAllWhenRowMissingAndAuthenticatedRegardlessOfLegacyParams() {
|
||||||
val member = createMember(id = 2100L, withAuth = true)
|
val member = createMember(id = 2100L, withAuth = true)
|
||||||
countryContext.setCountryCode("US")
|
countryContext.setCountryCode("US")
|
||||||
|
|
||||||
@@ -269,14 +269,10 @@ class MemberContentPreferenceServiceTest {
|
|||||||
Mockito.`when`(repository.saveAndFlush(Mockito.any(MemberContentPreference::class.java)))
|
Mockito.`when`(repository.saveAndFlush(Mockito.any(MemberContentPreference::class.java)))
|
||||||
.thenAnswer { invocation -> invocation.getArgument(0) }
|
.thenAnswer { invocation -> invocation.getArgument(0) }
|
||||||
|
|
||||||
val result = service.resolveForQuery(
|
val result = service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.FEMALE
|
|
||||||
)
|
|
||||||
|
|
||||||
assertTrue(result.isAdultContentVisible)
|
assertTrue(result.isAdultContentVisible)
|
||||||
assertEquals(ContentType.FEMALE, result.contentType)
|
assertEquals(ContentType.ALL, result.contentType)
|
||||||
assertTrue(result.isAdult)
|
assertTrue(result.isAdult)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,11 +288,7 @@ class MemberContentPreferenceServiceTest {
|
|||||||
Mockito.`when`(repository.saveAndFlush(Mockito.any(MemberContentPreference::class.java)))
|
Mockito.`when`(repository.saveAndFlush(Mockito.any(MemberContentPreference::class.java)))
|
||||||
.thenAnswer { invocation -> invocation.getArgument(0) }
|
.thenAnswer { invocation -> invocation.getArgument(0) }
|
||||||
|
|
||||||
val result = service.resolveForQuery(
|
val result = service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = null,
|
|
||||||
contentType = null
|
|
||||||
)
|
|
||||||
|
|
||||||
assertTrue(result.isAdultContentVisible)
|
assertTrue(result.isAdultContentVisible)
|
||||||
assertEquals(ContentType.ALL, result.contentType)
|
assertEquals(ContentType.ALL, result.contentType)
|
||||||
@@ -315,11 +307,7 @@ class MemberContentPreferenceServiceTest {
|
|||||||
Mockito.`when`(repository.saveAndFlush(Mockito.any(MemberContentPreference::class.java)))
|
Mockito.`when`(repository.saveAndFlush(Mockito.any(MemberContentPreference::class.java)))
|
||||||
.thenAnswer { invocation -> invocation.getArgument(0) }
|
.thenAnswer { invocation -> invocation.getArgument(0) }
|
||||||
|
|
||||||
val result = service.resolveForQuery(
|
val result = service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.MALE
|
|
||||||
)
|
|
||||||
|
|
||||||
assertFalse(result.isAdultContentVisible)
|
assertFalse(result.isAdultContentVisible)
|
||||||
assertEquals(ContentType.ALL, result.contentType)
|
assertEquals(ContentType.ALL, result.contentType)
|
||||||
@@ -431,11 +419,7 @@ class MemberContentPreferenceServiceTest {
|
|||||||
countryContext.setCountryCode("US")
|
countryContext.setCountryCode("US")
|
||||||
Mockito.`when`(repository.findByMemberId(21L)).thenReturn(preference)
|
Mockito.`when`(repository.findByMemberId(21L)).thenReturn(preference)
|
||||||
|
|
||||||
val result = service.resolveForQuery(
|
val result = service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = ContentType.MALE
|
|
||||||
)
|
|
||||||
|
|
||||||
assertEquals(ContentType.FEMALE, result.contentType)
|
assertEquals(ContentType.FEMALE, result.contentType)
|
||||||
assertFalse(result.isAdultContentVisible)
|
assertFalse(result.isAdultContentVisible)
|
||||||
@@ -449,11 +433,7 @@ class MemberContentPreferenceServiceTest {
|
|||||||
countryContext.setCountryCode("US")
|
countryContext.setCountryCode("US")
|
||||||
Mockito.`when`(repository.findByMemberId(25L)).thenReturn(preference)
|
Mockito.`when`(repository.findByMemberId(25L)).thenReturn(preference)
|
||||||
|
|
||||||
service.resolveForQuery(
|
service.resolveForQuery(member = member)
|
||||||
member = member,
|
|
||||||
isAdultContentVisible = true,
|
|
||||||
contentType = null
|
|
||||||
)
|
|
||||||
|
|
||||||
verifyRecommendLiveCacheNotEvicted(25L)
|
verifyRecommendLiveCacheNotEvicted(25L)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user