From 88d90eec2f71906e5075483d0454cbda86172a1f Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 20 Nov 2025 00:26:24 +0900 Subject: [PATCH] =?UTF-8?q?feat(content-sort-type):=20getLatestContentByTh?= =?UTF-8?q?eme(=ED=85=8C=EB=A7=88=EB=B3=84=20=EC=BD=98=ED=85=90=EC=B8=A0?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C)=EC=8B=9C=20=EC=A0=95=EB=A0=AC=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/AudioContentController.kt | 5 ++++- .../content/AudioContentRepository.kt | 19 ++++++++++++++++++- .../sodalive/content/AudioContentService.kt | 2 ++ 3 files changed, 24 insertions(+), 2 deletions(-) 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,