test #410

Merged
klaus merged 4 commits from test into main 2026-03-28 09:27:29 +00:00
9 changed files with 73 additions and 104 deletions
Showing only changes of commit feb1ab9f13 - Show all commits

View File

@@ -0,0 +1,44 @@
# 20260328 콘텐츠 조회 파라미터 제거 및 비로그인 기본값 고정
## 목적
- 모든 API에서 `isAdultContentVisible`, `contentType` 요청 파라미터를 제거한다.
- 비로그인 사용자는 항상 `isAdultContentVisible = false`, `contentType = ContentType.ALL`로 처리한다.
- 로그인 사용자는 기존과 동일하게 `MemberContentPreference` 기반 로직을 유지한다.
## 구현 체크리스트
- [x] `isAdultContentVisible`, `contentType`를 받는 잔여 API 시그니처를 모두 제거한다.
- QA: `grep("@RequestParam(\"isAdultContentVisible\"|@RequestParam(\"contentType\")")` 결과가 0인지 확인
- [x] 연관 서비스 메서드 시그니처/호출부를 정리한다.
- QA: `compileKotlin` 성공으로 시그니처 불일치가 없는지 확인
- [x] 비로그인 기본값을 `false/ALL`로 고정한다.
- QA: 익명 분기 `ViewerContentPreference(false/ALL)` 코드 확인 + 관련 테스트 통과
- [x] 로그인 분기는 기존 `memberContentPreferenceService.resolveForQuery(member = member)` 흐름을 유지한다.
- QA: 관련 컨트롤러/서비스에서 로그인 분기 호출 유지 확인
- [x] 회귀 검증을 수행한다.
- QA: `./gradlew test`, `./gradlew build` 성공
## 구현 완료 후 기록
### 1차 구현
- 무엇을:
- 잔여 API 파라미터를 전부 제거했다.
- `HomeController`, `LiveApiController`, `LiveRoomController`, `AudioContentController`, `AudioContentMainTabHomeController`
- 연관 서비스 시그니처와 호출부를 정리했다.
- `HomeService`, `LiveApiService`, `LiveRoomService`
- 비로그인 분기 기본값을 `ViewerContentPreference(isAdultContentVisible = false, contentType = ContentType.ALL, isAdult = false)`로 고정했다.
- 왜:
- 요청사항이 “모든 API에서 해당 파라미터 제거 + 비로그인 기본값 고정 + 로그인 기존 동작 유지”로 명확했기 때문이다.
- 어떻게:
- 명령:
- `./gradlew compileKotlin compileTestKotlin`
- `grep("@RequestParam(\"isAdultContentVisible\"|@RequestParam(\"contentType\")", include="*Controller.kt")`
- `ast-grep: ViewerContentPreference(isAdultContentVisible = false, contentType = ContentType.ALL)`
- `./gradlew test`
- `./gradlew build`
- `lsp_diagnostics`(수정된 `.kt` 파일 대상)
- 결과:
- 컴파일 성공(`compileKotlin`, `compileTestKotlin`).
- 컨트롤러의 `@RequestParam("isAdultContentVisible")`, `@RequestParam("contentType")` 검색 결과 0건.
- 비로그인 기본값 고정 분기 5개 위치 확인(`HomeService`, `LiveApiService`, `LiveRoomService`, `AudioContentController`, `AudioContentMainTabHomeController`).
- `./gradlew test` 성공.
- `./gradlew build` 성공.
- 현재 환경은 Kotlin LSP 서버 미구성으로 `lsp_diagnostics(.kt)` 실행 불가였고, Gradle 컴파일/테스트/빌드로 정합성 검증 완료.

View File

@@ -1,7 +1,6 @@
package kr.co.vividnext.sodalive.api.home package kr.co.vividnext.sodalive.api.home
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.content.ContentType
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesPublishedDaysOfWeek
import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.rank.ContentRankingSortType import kr.co.vividnext.sodalive.rank.ContentRankingSortType
@@ -17,15 +16,11 @@ class HomeController(private val service: HomeService) {
@GetMapping @GetMapping
fun fetchData( fun fetchData(
@RequestParam timezone: String, @RequestParam timezone: 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 {
ApiResponse.ok( ApiResponse.ok(
service.fetchData( service.fetchData(
timezone = timezone, timezone = timezone,
isAdultContentVisible = isAdultContentVisible,
contentType = contentType,
member member
) )
) )
@@ -34,15 +29,11 @@ class HomeController(private val service: HomeService) {
@GetMapping("/latest-content") @GetMapping("/latest-content")
fun getLatestContentByTheme( fun getLatestContentByTheme(
@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?
) = run { ) = run {
ApiResponse.ok( ApiResponse.ok(
service.getLatestContentByTheme( service.getLatestContentByTheme(
theme = theme, theme = theme,
isAdultContentVisible = isAdultContentVisible,
contentType = contentType,
member member
) )
) )
@@ -51,15 +42,11 @@ class HomeController(private val service: HomeService) {
@GetMapping("/day-of-week-series") @GetMapping("/day-of-week-series")
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,
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
) = run { ) = run {
ApiResponse.ok( ApiResponse.ok(
service.getDayOfWeekSeriesList( service.getDayOfWeekSeriesList(
dayOfWeek = dayOfWeek, dayOfWeek = dayOfWeek,
isAdultContentVisible = isAdultContentVisible,
contentType = contentType,
member member
) )
) )
@@ -68,14 +55,10 @@ class HomeController(private val service: HomeService) {
// 추천 콘텐츠만 새로고침하기 위한 엔드포인트 // 추천 콘텐츠만 새로고침하기 위한 엔드포인트
@GetMapping("/recommend-contents") @GetMapping("/recommend-contents")
fun getRecommendContents( fun getRecommendContents(
@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 {
ApiResponse.ok( ApiResponse.ok(
service.getRecommendContentList( service.getRecommendContentList(
isAdultContentVisible = isAdultContentVisible,
contentType = contentType,
member = member member = member
) )
) )
@@ -85,8 +68,6 @@ class HomeController(private val service: HomeService) {
@GetMapping("/content-ranking") @GetMapping("/content-ranking")
fun getContentRanking( fun getContentRanking(
@RequestParam("sort", required = false) sort: ContentRankingSortType? = null, @RequestParam("sort", required = false) sort: ContentRankingSortType? = null,
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
@RequestParam("contentType", required = false) contentType: ContentType? = null,
@RequestParam("offset", required = false) offset: Long? = null, @RequestParam("offset", required = false) offset: Long? = null,
@RequestParam("limit", required = false) limit: Long? = null, @RequestParam("limit", required = false) limit: Long? = null,
@RequestParam("theme", required = false) theme: String? = null, @RequestParam("theme", required = false) theme: String? = null,
@@ -95,8 +76,6 @@ class HomeController(private val service: HomeService) {
ApiResponse.ok( ApiResponse.ok(
service.getContentRankingBySort( service.getContentRankingBySort(
sort = sort ?: ContentRankingSortType.REVENUE, sort = sort ?: ContentRankingSortType.REVENUE,
isAdultContentVisible = isAdultContentVisible,
contentType = contentType,
offset = offset, offset = offset,
limit = limit, limit = limit,
theme = theme, theme = theme,

View File

@@ -72,11 +72,9 @@ class HomeService(
fun fetchData( fun fetchData(
timezone: String, timezone: String,
isAdultContentVisible: Boolean?,
contentType: ContentType?,
member: Member? member: Member?
): GetHomeResponse { ): GetHomeResponse {
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
val resolvedContentType = preference.contentType val resolvedContentType = preference.contentType
@@ -84,7 +82,6 @@ class HomeService(
val liveList = liveRoomService.getRoomList( val liveList = liveRoomService.getRoomList(
dateString = null, dateString = null,
status = LiveRoomStatus.NOW, status = LiveRoomStatus.NOW,
isAdultContentVisible = isAdult,
pageable = Pageable.ofSize(10), pageable = Pageable.ofSize(10),
member = member, member = member,
timezone = timezone timezone = timezone
@@ -227,11 +224,9 @@ class HomeService(
fun getLatestContentByTheme( fun getLatestContentByTheme(
theme: String, theme: String,
isAdultContentVisible: Boolean?,
contentType: ContentType?,
member: Member? member: Member?
): List<AudioContentMainItem> { ): List<AudioContentMainItem> {
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
val resolvedContentType = preference.contentType val resolvedContentType = preference.contentType
@@ -258,11 +253,9 @@ class HomeService(
fun getDayOfWeekSeriesList( fun getDayOfWeekSeriesList(
dayOfWeek: SeriesPublishedDaysOfWeek, dayOfWeek: SeriesPublishedDaysOfWeek,
isAdultContentVisible: Boolean?,
contentType: ContentType?,
member: Member? member: Member?
): List<GetSeriesListResponse.SeriesListItem> { ): List<GetSeriesListResponse.SeriesListItem> {
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
@@ -276,14 +269,12 @@ class HomeService(
fun getContentRankingBySort( fun getContentRankingBySort(
sort: ContentRankingSortType, sort: ContentRankingSortType,
isAdultContentVisible: Boolean?,
contentType: ContentType?,
offset: Long?, offset: Long?,
limit: Long?, limit: Long?,
theme: String?, theme: String?,
member: Member? member: Member?
): List<GetAudioContentRankingItem> { ): List<GetAudioContentRankingItem> {
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
@@ -328,12 +319,10 @@ class HomeService(
} }
fun getRecommendContentList( fun getRecommendContentList(
isAdultContentVisible: Boolean?,
contentType: ContentType?,
member: Member?, member: Member?,
excludeContentIds: List<Long> = emptyList() excludeContentIds: List<Long> = emptyList()
): List<AudioContentMainItem> { ): List<AudioContentMainItem> {
val preference = resolvePreference(member, isAdultContentVisible, contentType) val preference = resolvePreference(member)
return getRecommendContentListByPreference(preference, member, excludeContentIds) return getRecommendContentListByPreference(preference, member, excludeContentIds)
} }
@@ -391,16 +380,12 @@ class HomeService(
return result.take(RECOMMEND_TARGET_SIZE).shuffled() return result.take(RECOMMEND_TARGET_SIZE).shuffled()
} }
private fun resolvePreference( private fun resolvePreference(member: Member?): ViewerContentPreference {
member: Member?,
isAdultContentVisible: Boolean?,
contentType: ContentType?
): ViewerContentPreference {
if (member == null) { if (member == null) {
return ViewerContentPreference( return ViewerContentPreference(
countryCode = "KR", countryCode = "KR",
isAdultContentVisible = isAdultContentVisible ?: false, isAdultContentVisible = false,
contentType = contentType ?: ContentType.ALL, contentType = ContentType.ALL,
isAdult = false isAdult = false
) )
} }

View File

@@ -1,7 +1,6 @@
package kr.co.vividnext.sodalive.api.live package kr.co.vividnext.sodalive.api.live
import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.content.ContentType
import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.Member
import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.security.core.annotation.AuthenticationPrincipal
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.GetMapping
@@ -17,14 +16,10 @@ class LiveApiController(
@GetMapping @GetMapping
fun fetchData( fun fetchData(
@RequestParam timezone: String, @RequestParam timezone: String,
@RequestParam("contentType", required = false) contentType: ContentType? = null,
@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 {
ApiResponse.ok( ApiResponse.ok(
service.fetchData( service.fetchData(
isAdultContentVisible = isAdultContentVisible,
contentType = contentType,
timezone = timezone, timezone = timezone,
member = member member = member
) )

View File

@@ -24,19 +24,16 @@ class LiveApiService(
private val blockMemberRepository: BlockMemberRepository private val blockMemberRepository: BlockMemberRepository
) { ) {
fun fetchData( fun fetchData(
isAdultContentVisible: Boolean?,
contentType: ContentType?,
timezone: String, timezone: String,
member: Member? member: Member?
): LiveMainResponse { ): LiveMainResponse {
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
val liveOnAirRoomList = liveService.getRoomList( val liveOnAirRoomList = liveService.getRoomList(
dateString = null, dateString = null,
status = LiveRoomStatus.NOW, status = LiveRoomStatus.NOW,
isAdultContentVisible = isAdult,
pageable = Pageable.ofSize(20), pageable = Pageable.ofSize(20),
member = member, member = member,
timezone = timezone timezone = timezone
@@ -81,7 +78,6 @@ class LiveApiService(
val liveReservationRoomList = liveService.getRoomList( val liveReservationRoomList = liveService.getRoomList(
dateString = null, dateString = null,
status = LiveRoomStatus.RESERVATION, status = LiveRoomStatus.RESERVATION,
isAdultContentVisible = isAdult,
pageable = Pageable.ofSize(10), pageable = Pageable.ofSize(10),
member = member, member = member,
timezone = timezone timezone = timezone
@@ -98,16 +94,12 @@ class LiveApiService(
) )
} }
private fun resolvePreference( private fun resolvePreference(member: Member?): ViewerContentPreference {
member: Member?,
isAdultContentVisible: Boolean?,
contentType: ContentType?
): ViewerContentPreference {
if (member == null) { if (member == null) {
return ViewerContentPreference( return ViewerContentPreference(
countryCode = "KR", countryCode = "KR",
isAdultContentVisible = isAdultContentVisible ?: false, isAdultContentVisible = false,
contentType = contentType ?: ContentType.ALL, contentType = ContentType.ALL,
isAdult = false isAdult = false
) )
} }

View File

@@ -111,13 +111,11 @@ class AudioContentController(
@RequestParam("creator-id") creatorId: Long, @RequestParam("creator-id") creatorId: Long,
@RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST, @RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST,
@RequestParam("category-id", required = false) categoryId: Long? = 0, @RequestParam("category-id", required = false) categoryId: Long? = 0,
@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.getAudioContentList( service.getAudioContentList(
@@ -137,11 +135,10 @@ class AudioContentController(
fun getDetail( fun getDetail(
@PathVariable id: Long, @PathVariable id: 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")
val preference = resolvePreference(member, isAdultContentVisible, null) val preference = resolvePreference(member)
ApiResponse.ok( ApiResponse.ok(
service.getDetail( service.getDetail(
@@ -194,12 +191,10 @@ class AudioContentController(
@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 {
val preference = resolvePreference(member, isAdultContentVisible, contentType) val preference = resolvePreference(member)
val currentDateTime = LocalDateTime.now() val currentDateTime = LocalDateTime.now()
val startDate = currentDateTime val startDate = currentDateTime
.withHour(15) .withHour(15)
@@ -247,8 +242,6 @@ class AudioContentController(
@GetMapping("/all") @GetMapping("/all")
fun getAllContents( fun getAllContents(
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
@RequestParam("contentType", required = false) contentType: ContentType? = null,
@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("sort-type", required = false) sortType: SortType? = SortType.NEWEST, @RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST,
@@ -257,7 +250,7 @@ class AudioContentController(
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.getLatestContentByTheme( service.getLatestContentByTheme(
@@ -276,11 +269,9 @@ class AudioContentController(
@GetMapping("/replay-live") @GetMapping("/replay-live")
fun replayLive( fun replayLive(
@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 {
val preference = resolvePreference(member, isAdultContentVisible, contentType) val preference = resolvePreference(member)
ApiResponse.ok( ApiResponse.ok(
service.getLatestContentByTheme( service.getLatestContentByTheme(
memberId = member?.id, memberId = member?.id,
@@ -292,16 +283,12 @@ class AudioContentController(
) )
} }
private fun resolvePreference( private fun resolvePreference(member: Member?): ViewerContentPreference {
member: Member?,
isAdultContentVisible: Boolean?,
contentType: ContentType?
): ViewerContentPreference {
if (member == null) { if (member == null) {
return ViewerContentPreference( return ViewerContentPreference(
countryCode = "KR", countryCode = "KR",
isAdultContentVisible = isAdultContentVisible ?: false, isAdultContentVisible = false,
contentType = contentType ?: ContentType.ALL, contentType = ContentType.ALL,
isAdult = false isAdult = false
) )
} }

View File

@@ -19,11 +19,9 @@ class AudioContentMainTabHomeController(
) { ) {
@GetMapping @GetMapping
fun fetchContentMainHome( fun fetchContentMainHome(
@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 {
val preference = resolvePreference(member, isAdultContentVisible, contentType) val preference = resolvePreference(member)
ApiResponse.ok( ApiResponse.ok(
service.fetchData( service.fetchData(
isAdultContentVisible = preference.isAdultContentVisible, isAdultContentVisible = preference.isAdultContentVisible,
@@ -36,11 +34,9 @@ class AudioContentMainTabHomeController(
@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 {
val preference = resolvePreference(member, isAdultContentVisible, contentType) val preference = resolvePreference(member)
ApiResponse.ok( ApiResponse.ok(
service.getPopularContentByCreator( service.getPopularContentByCreator(
creatorId = creatorId, creatorId = creatorId,
@@ -53,11 +49,9 @@ class AudioContentMainTabHomeController(
@GetMapping("/content/ranking") @GetMapping("/content/ranking")
fun getContentRanking( fun getContentRanking(
@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?
) = run { ) = run {
val preference = resolvePreference(member, isAdultContentVisible, contentType) val preference = resolvePreference(member)
ApiResponse.ok( ApiResponse.ok(
service.getContentRanking( service.getContentRanking(
sortType = sortType ?: "매출", sortType = sortType ?: "매출",
@@ -68,16 +62,12 @@ class AudioContentMainTabHomeController(
) )
} }
private fun resolvePreference( private fun resolvePreference(member: Member?): ViewerContentPreference {
member: Member?,
isAdultContentVisible: Boolean?,
contentType: ContentType?
): ViewerContentPreference {
if (member == null) { if (member == null) {
return ViewerContentPreference( return ViewerContentPreference(
countryCode = "KR", countryCode = "KR",
isAdultContentVisible = isAdultContentVisible ?: false, isAdultContentVisible = false,
contentType = contentType ?: ContentType.ALL, contentType = ContentType.ALL,
isAdult = false isAdult = false
) )
} }

View File

@@ -35,7 +35,6 @@ class LiveRoomController(
@RequestParam timezone: String, @RequestParam timezone: String,
@RequestParam dateString: String? = null, @RequestParam dateString: String? = null,
@RequestParam status: LiveRoomStatus, @RequestParam status: LiveRoomStatus,
@RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null,
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
pageable: Pageable pageable: Pageable
) = run { ) = run {
@@ -43,7 +42,6 @@ class LiveRoomController(
service.getRoomList( service.getRoomList(
dateString, dateString,
status, status,
isAdultContentVisible,
pageable, pageable,
member, member,
timezone timezone

View File

@@ -205,12 +205,11 @@ class LiveRoomService(
fun getRoomList( fun getRoomList(
dateString: String?, dateString: String?,
status: LiveRoomStatus, status: LiveRoomStatus,
isAdultContentVisible: Boolean?,
pageable: Pageable, pageable: Pageable,
member: Member?, member: Member?,
timezone: String timezone: String
): List<GetRoomListResponse> { ): List<GetRoomListResponse> {
val preference = resolvePreference(member, isAdultContentVisible) val preference = resolvePreference(member)
val isAdult = preference.isAdult val isAdult = preference.isAdult
val effectiveGender = member?.let { val effectiveGender = member?.let {
if (it.auth != null) { if (it.auth != null) {
@@ -1470,11 +1469,11 @@ class LiveRoomService(
return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() } return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() }
} }
private fun resolvePreference(member: Member?, isAdultContentVisible: Boolean?): ViewerContentPreference { private fun resolvePreference(member: Member?): ViewerContentPreference {
if (member == null) { if (member == null) {
return ViewerContentPreference( return ViewerContentPreference(
countryCode = "KR", countryCode = "KR",
isAdultContentVisible = isAdultContentVisible ?: false, isAdultContentVisible = false,
contentType = ContentType.ALL, contentType = ContentType.ALL,
isAdult = false isAdult = false
) )