diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeController.kt index 698985c..ef84371 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeController.kt @@ -27,6 +27,26 @@ class AudioContentThemeController(private val service: AudioContentThemeService) ApiResponse.ok(service.getThemes()) } + @GetMapping("/active") + fun getActiveThemes( + @RequestParam("isFree", required = false) isFree: 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? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok( + service.getActiveThemeOfContent( + isAdult = member.auth != null && (isAdultContentVisible ?: true), + isFree = isFree ?: false, + isPointAvailableOnly = isPointAvailableOnly ?: false, + contentType = contentType ?: ContentType.ALL + ) + ) + } + @GetMapping("/{id}/content") fun getContentByTheme( @PathVariable id: Long, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeQueryRepository.kt index 2eeb2ad..1ad1d65 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeQueryRepository.kt @@ -32,6 +32,7 @@ class AudioContentThemeQueryRepository( fun getActiveThemeOfContent( isAdult: Boolean = false, isFree: Boolean = false, + isPointAvailableOnly: Boolean = false, contentType: ContentType ): List { var where = audioContent.isActive.isTrue @@ -59,6 +60,10 @@ class AudioContentThemeQueryRepository( where = where.and(audioContent.price.loe(0)) } + if (isPointAvailableOnly) { + where = where.and(audioContent.isPointAvailable.isTrue) + } + return queryFactory .select(audioContentTheme.theme) .from(audioContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeService.kt index 6bafdcf..385b270 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/AudioContentThemeService.kt @@ -23,11 +23,13 @@ class AudioContentThemeService( fun getActiveThemeOfContent( isAdult: Boolean = false, isFree: Boolean = false, + isPointAvailableOnly: Boolean = false, contentType: ContentType ): List { return queryRepository.getActiveThemeOfContent( isAdult = isAdult, isFree = isFree, + isPointAvailableOnly = isPointAvailableOnly, contentType = contentType ) }