feat(content-sort-type): 콘텐츠가 있는 active 테마 조회 API 추가

This commit is contained in:
2025-11-20 00:51:09 +09:00
parent 88d90eec2f
commit 60989391f6
3 changed files with 27 additions and 0 deletions

View File

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

View File

@@ -32,6 +32,7 @@ class AudioContentThemeQueryRepository(
fun getActiveThemeOfContent(
isAdult: Boolean = false,
isFree: Boolean = false,
isPointAvailableOnly: Boolean = false,
contentType: ContentType
): List<String> {
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)

View File

@@ -23,11 +23,13 @@ class AudioContentThemeService(
fun getActiveThemeOfContent(
isAdult: Boolean = false,
isFree: Boolean = false,
isPointAvailableOnly: Boolean = false,
contentType: ContentType
): List<String> {
return queryRepository.getActiveThemeOfContent(
isAdult = isAdult,
isFree = isFree,
isPointAvailableOnly = isPointAvailableOnly,
contentType = contentType
)
}