diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt index ff15997..5cddb91 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -243,6 +243,8 @@ class AudioContentController(private val service: AudioContentService) { @RequestParam("contentType", required = false) contentType: ContentType? = null, @RequestParam("isFree", required = false) isFree: Boolean? = null, @RequestParam("isPointAvailableOnly", required = false) isPointAvailableOnly: Boolean? = null, + @RequestParam("sort-type", required = false) sortType: SortType? = SortType.NEWEST, + @RequestParam("theme", required = false) theme: String? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -250,10 +252,11 @@ class AudioContentController(private val service: AudioContentService) { ApiResponse.ok( service.getLatestContentByTheme( - theme = emptyList(), + theme = if (theme == null) listOf() else listOf(theme), contentType = contentType ?: ContentType.ALL, offset = pageable.offset, limit = pageable.pageSize.toLong(), + sortType = sortType ?: SortType.NEWEST, isFree = isFree ?: false, isAdult = (isAdultContentVisible ?: true) && member.auth != null, isPointAvailableOnly = isPointAvailableOnly ?: false diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index a2b4dc1..c66539b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -180,6 +180,7 @@ interface AudioContentQueryRepository { contentType: ContentType, offset: Long, limit: Long, + sortType: SortType, isFree: Boolean, isAdult: Boolean, orderByRandom: Boolean = false, @@ -1304,6 +1305,7 @@ class AudioContentQueryRepositoryImpl( contentType: ContentType, offset: Long, limit: Long, + sortType: SortType, isFree: Boolean, isAdult: Boolean, orderByRandom: Boolean, @@ -1349,7 +1351,22 @@ class AudioContentQueryRepositoryImpl( val orderBy = if (orderByRandom) { Expressions.numberTemplate(Double::class.java, "function('rand')").asc() } else { - audioContent.releaseDate.desc() + when (sortType) { + SortType.NEWEST -> audioContent.releaseDate.desc() + SortType.PRICE_HIGH -> if (isFree) { + audioContent.releaseDate.desc() + } else { + audioContent.price.desc() + } + + SortType.PRICE_LOW -> if (isFree) { + audioContent.releaseDate.asc() + } else { + audioContent.price.desc() + } + + SortType.POPULARITY -> audioContent.playCount.desc() + } } return queryFactory diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index 23bca75..dfb4a0d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -988,6 +988,7 @@ class AudioContentService( contentType: ContentType, offset: Long = 0, limit: Long = 20, + sortType: SortType = SortType.NEWEST, isFree: Boolean = false, isAdult: Boolean = false, orderByRandom: Boolean = false, @@ -998,6 +999,7 @@ class AudioContentService( contentType = contentType, offset = offset, limit = limit, + sortType = sortType, isFree = isFree, isAdult = isAdult, orderByRandom = orderByRandom,