From 88d326023ba9407999de97045d2aba4da7378a7e Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 13 Feb 2024 23:11:51 +0900 Subject: [PATCH] =?UTF-8?q?=ED=85=8C=EB=A7=88=EB=B3=84=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0=20API?= =?UTF-8?q?=20-=20=EC=A0=95=EB=A0=AC=EA=B8=B0=EC=A4=80=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/content/AudioContentRepository.kt | 10 +++++++++- .../content/theme/AudioContentThemeController.kt | 4 ++++ .../sodalive/content/theme/AudioContentThemeService.kt | 10 +++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) 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 a90a503..b896e68 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -62,6 +62,7 @@ interface AudioContentQueryRepository { cloudfrontHost: String, memberId: Long, theme: String = "", + sortType: SortType = SortType.NEWEST, isAdult: Boolean = false, offset: Long = 0, limit: Long = 20 @@ -317,10 +318,17 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) cloudfrontHost: String, memberId: Long, theme: String, + sortType: SortType, isAdult: Boolean, offset: Long, limit: Long ): List { + val orderBy = when (sortType) { + SortType.NEWEST -> audioContent.releaseDate.desc() + SortType.PRICE_HIGH -> audioContent.price.desc() + SortType.PRICE_LOW -> audioContent.price.asc() + } + var where = audioContent.isActive.isTrue .and( audioContent.releaseDate.isNull @@ -355,7 +363,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) .where(where) .offset(offset) .limit(limit) - .orderBy(audioContent.releaseDate.desc()) + .orderBy(orderBy) .fetch() } 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 7603454..9c85c48 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 @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.content.theme import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.content.SortType import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize @@ -9,6 +10,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @RestController @@ -27,6 +29,7 @@ class AudioContentThemeController(private val service: AudioContentThemeService) @GetMapping("/{id}/content") fun getContentByTheme( @PathVariable id: Long, + @RequestParam("sort-type", required = false) sortType: SortType = SortType.NEWEST, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -35,6 +38,7 @@ class AudioContentThemeController(private val service: AudioContentThemeService) ApiResponse.ok( service.getContentByTheme( themeId = id, + sortType = sortType, member = member, offset = pageable.offset, limit = pageable.pageSize.toLong() 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 bf46a82..cbee2f4 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 @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.content.theme import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.content.AudioContentRepository +import kr.co.vividnext.sodalive.content.SortType import kr.co.vividnext.sodalive.content.theme.content.GetContentByThemeResponse import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.block.BlockMemberRepository @@ -24,7 +25,13 @@ class AudioContentThemeService( } @Transactional(readOnly = true) - fun getContentByTheme(themeId: Long, member: Member, offset: Long, limit: Long): GetContentByThemeResponse { + fun getContentByTheme( + themeId: Long, + sortType: SortType, + member: Member, + offset: Long, + limit: Long + ): GetContentByThemeResponse { val theme = queryRepository.findThemeByIdAndActive(themeId) ?: throw SodaException("잘못된 요청입니다.") @@ -32,6 +39,7 @@ class AudioContentThemeService( cloudfrontHost = imageHost, memberId = member.id!!, theme = theme.theme, + sortType = sortType, isAdult = member.auth != null, offset = offset, limit = limit