From bebfda03435aef2053eda2d38a7ad6c252fc76eb Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 14 Feb 2025 03:20:18 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=EB=A6=AC=EC=A6=88=20=ED=83=AD=20-=20?= =?UTF-8?q?=EC=98=A4=EB=A6=AC=EC=A7=80=EB=84=90=20=EB=93=9C=EB=9D=BC?= =?UTF-8?q?=EB=A7=88=20=EC=A0=84=EC=B2=B4=EB=B3=B4=EA=B8=B0=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AudioContentMainTabSeriesController.kt | 18 ++++++++++++++ .../AudioContentMainTabSeriesService.kt | 18 ++++++++++++++ .../content/series/ContentSeriesRepository.kt | 24 +++++++++++++++++++ .../content/series/ContentSeriesService.kt | 4 ++++ 4 files changed, 64 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt index 1e27aa6..f9ff1af 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesController.kt @@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.content.main.tab.series import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.member.Member +import org.springframework.data.domain.Pageable import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping @@ -19,4 +20,21 @@ class AudioContentMainTabSeriesController(private val service: AudioContentMainT ApiResponse.ok(service.fetchData(member)) } + + @GetMapping("/original") + fun getOriginalAudioDramaList( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, + pageable: Pageable + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok( + service.getOriginalAudioDramaList( + memberId = member.id!!, + isAdult = member.auth != null, + offset = pageable.offset, + limit = pageable.pageSize.toLong() + ) + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt index 33efe70..2bcdc14 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/series/AudioContentMainTabSeriesService.kt @@ -4,6 +4,7 @@ import kr.co.vividnext.sodalive.content.main.banner.AudioContentBannerService import kr.co.vividnext.sodalive.content.main.curation.AudioContentCurationQueryRepository import kr.co.vividnext.sodalive.content.main.tab.RecommendSeriesRepository import kr.co.vividnext.sodalive.content.series.ContentSeriesService +import kr.co.vividnext.sodalive.content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.event.EventService import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.rank.RankingService @@ -148,4 +149,21 @@ class AudioContentMainTabSeriesService( curationList = curationList ) } + + fun getOriginalAudioDramaList( + memberId: Long, + isAdult: Boolean, + offset: Long, + limit: Long + ): GetSeriesListResponse { + val totalCount = seriesService.getOriginalAudioDramaTotalCount(memberId, isAdult) + val items = seriesService.getOriginalAudioDramaList( + memberId = memberId, + isAdult = isAdult, + offset = 0, + limit = 20 + ) + + return GetSeriesListResponse(totalCount, items) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt index e91df51..c769fbf 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesRepository.kt @@ -36,6 +36,7 @@ interface ContentSeriesQueryRepository { fun getSeriesContentMinMaxPrice(seriesId: Long): GetSeriesContentMinMaxPriceResponse fun getRecommendSeriesList(isAuth: Boolean, contentType: ContentType, limit: Long): List fun getOriginalAudioDramaList(memberId: Long, isAdult: Boolean, offset: Long = 0, limit: Long = 20): List + fun getOriginalAudioDramaTotalCount(memberId: Long, isAdult: Boolean): Int fun getGenreList(isAdult: Boolean): List fun findByCurationId(curationId: Long, memberId: Long, isAdult: Boolean): List } @@ -167,6 +168,29 @@ class ContentSeriesQueryRepositoryImpl( .fetch() } + override fun getOriginalAudioDramaTotalCount(memberId: Long, isAdult: Boolean): Int { + val blockMemberCondition = blockMember.member.id.eq(member.id) + .and(blockMember.isActive.isTrue) + .and(blockMember.blockedMember.id.eq(memberId)) + + var where = series.isOriginal.isTrue + .and(series.isActive.isTrue) + .and(blockMember.id.isNull) + + if (!isAdult) { + where = where.and(series.isAdult.isFalse) + } + + return queryFactory + .select(series.id) + .from(series) + .innerJoin(series.member, member) + .leftJoin(blockMember).on(blockMemberCondition) + .where(where) + .fetch() + .size + } + override fun getGenreList(isAdult: Boolean): List { var where = seriesGenre.isActive.isTrue diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt index e3a7db1..cac46b9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesService.kt @@ -30,6 +30,10 @@ class ContentSeriesService( @Value("\${cloud.aws.cloud-front.host}") private val coverImageHost: String ) { + fun getOriginalAudioDramaTotalCount(memberId: Long, isAdult: Boolean): Int { + return repository.getOriginalAudioDramaTotalCount(memberId, isAdult) + } + fun getOriginalAudioDramaList( memberId: Long, isAdult: Boolean,