From 1d904c5cde7a5858a3703713301f980b7003a3ae Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 13 Feb 2024 03:17:34 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20-=20=EA=B0=80=EA=B2=A9=EA=B3=BC=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/content/AudioContentRepository.kt | 12 +++++++++--- .../content/main/GetAudioContentMainItem.kt | 4 +++- .../content/main/GetAudioContentMainResponse.kt | 16 ---------------- .../AudioContentCurationQueryRepository.kt | 4 +++- .../sodalive/content/order/OrderRepository.kt | 4 +++- 5 files changed, 18 insertions(+), 22 deletions(-) delete mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainResponse.kt 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 c484bd9..a90a503 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -344,7 +344,9 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) audioContent.title, member.id, member.profileImage.prepend("/").prepend(cloudfrontHost), - member.nickname + member.nickname, + audioContent.price, + audioContent.duration ) ) .from(audioContent) @@ -416,7 +418,9 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) audioContent.title, member.id, member.profileImage.prepend("/").prepend(cloudfrontHost), - member.nickname + member.nickname, + audioContent.price, + audioContent.duration ) ) .from(audioContent) @@ -519,7 +523,9 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) member.profileImage .prepend("/") .prepend(cloudfrontHost), - member.nickname + member.nickname, + audioContent.price, + audioContent.duration ) ) .from(audioContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt index 93e884d..a329cd4 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt @@ -9,5 +9,7 @@ data class GetAudioContentMainItem @QueryProjection constructor( @JsonProperty("title") val title: String, @JsonProperty("creatorId") val creatorId: Long, @JsonProperty("creatorProfileImageUrl") val creatorProfileImageUrl: String, - @JsonProperty("creatorNickname") val creatorNickname: String + @JsonProperty("creatorNickname") val creatorNickname: String, + @JsonProperty("price") val price: Int, + @JsonProperty("duration") val duration: String ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainResponse.kt deleted file mode 100644 index 656e54e..0000000 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainResponse.kt +++ /dev/null @@ -1,16 +0,0 @@ -package kr.co.vividnext.sodalive.content.main - -import com.fasterxml.jackson.annotation.JsonProperty -import kr.co.vividnext.sodalive.content.main.banner.GetAudioContentBannerResponse -import kr.co.vividnext.sodalive.content.main.curation.GetAudioContentCurationResponse - -data class GetAudioContentMainResponse( - @JsonProperty("newContentUploadCreatorList") val newContentUploadCreatorList: List, - @JsonProperty("bannerList") val bannerList: List, - @JsonProperty("orderList") val orderList: List, - @JsonProperty("themeList") val themeList: List, - @JsonProperty("newContentList") val newContentList: List, - @JsonProperty("curationList") val curationList: List, - @JsonProperty("contentRankingSortTypeList") val contentRankingSortTypeList: List, - @JsonProperty("contentRanking") val contentRanking: GetAudioContentRanking -) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt index 878bf58..91994c6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt @@ -59,7 +59,9 @@ class AudioContentCurationQueryRepository(private val queryFactory: JPAQueryFact audioContent.title, member.id, member.profileImage.prepend("/").prepend(cloudfrontHost), - member.nickname + member.nickname, + audioContent.price, + audioContent.duration ) ) .from(audioContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt index feb941d..bcdce03 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt @@ -192,7 +192,9 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde member.profileImage .prepend("/") .prepend(coverImageHost), - member.nickname + member.nickname, + audioContent.price, + audioContent.duration ) ) .from(order) From d621e271a0eee2d1a1e73a617f2b3701b6f05247 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 13 Feb 2024 03:25:30 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=EC=BB=A4=EB=AE=A4=EB=8B=88=ED=8B=B0=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=EC=8B=9C=20=EC=95=8C=EB=A6=BC=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=20-=20=EC=83=88=20=EA=B8=80=EC=9D=B4=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=EB=90=98=EC=97=88=EC=8A=B5=EB=8B=88=EB=8B=A4.=20?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt | 2 +- .../profile/creatorCommunity/CreatorCommunityService.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt index 33ca0eb..6186c1b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt @@ -442,7 +442,7 @@ class ExplorerService( FcmEvent( type = FcmEventType.CHANGE_NOTICE, title = member.nickname, - message = "공지를 등록했습니다.", + message = "새 글이 등록되었습니다.", creatorId = member.id!! ) ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/creatorCommunity/CreatorCommunityService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/creatorCommunity/CreatorCommunityService.kt index 6adb097..c2d3958 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/creatorCommunity/CreatorCommunityService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/profile/creatorCommunity/CreatorCommunityService.kt @@ -77,7 +77,7 @@ class CreatorCommunityService( FcmEvent( type = FcmEventType.CHANGE_NOTICE, title = member.nickname, - message = "공지를 등록했습니다.", + message = "새 글이 등록되었습니다.", creatorId = member.id!! ) ) From 144bb4945b8f0cbe90377dec9ea666fdb7d1de0c Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 13 Feb 2024 15:56:36 +0900 Subject: [PATCH 3/5] =?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=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../theme/AudioContentThemeController.kt | 20 ++++++++++ .../content/theme/AudioContentThemeService.kt | 40 ++++++++++++++++++- .../content/GetContentByThemeResponse.kt | 8 ++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt 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 7b13530..7603454 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 @@ -3,9 +3,11 @@ 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.member.Member +import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize 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.RestController @@ -21,4 +23,22 @@ class AudioContentThemeController(private val service: AudioContentThemeService) ApiResponse.ok(service.getThemes()) } + + @GetMapping("/{id}/content") + fun getContentByTheme( + @PathVariable id: Long, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, + pageable: Pageable + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok( + service.getContentByTheme( + themeId = id, + 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 f8b2fb0..bf46a82 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 @@ -1,10 +1,48 @@ 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.theme.content.GetContentByThemeResponse +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.member.block.BlockMemberRepository +import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional @Service -class AudioContentThemeService(private val queryRepository: AudioContentThemeQueryRepository) { +class AudioContentThemeService( + private val queryRepository: AudioContentThemeQueryRepository, + private val blockMemberRepository: BlockMemberRepository, + private val contentRepository: AudioContentRepository, + + @Value("\${cloud.aws.cloud-front.host}") + private val imageHost: String +) { + @Transactional(readOnly = true) fun getThemes(): List { return queryRepository.getActiveThemes() } + + @Transactional(readOnly = true) + fun getContentByTheme(themeId: Long, member: Member, offset: Long, limit: Long): GetContentByThemeResponse { + val theme = queryRepository.findThemeByIdAndActive(themeId) + ?: throw SodaException("잘못된 요청입니다.") + + val items = contentRepository.findByTheme( + cloudfrontHost = imageHost, + memberId = member.id!!, + theme = theme.theme, + isAdult = member.auth != null, + offset = offset, + limit = limit + ) + .asSequence() + .filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.creatorId) } + .toList() + + return GetContentByThemeResponse( + theme = theme.theme, + items = items + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt new file mode 100644 index 0000000..59c4154 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt @@ -0,0 +1,8 @@ +package kr.co.vividnext.sodalive.content.theme.content + +import kr.co.vividnext.sodalive.content.main.GetAudioContentMainItem + +data class GetContentByThemeResponse( + val theme: String, + val items: List +) From 88d326023ba9407999de97045d2aba4da7378a7e Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 13 Feb 2024 23:11:51 +0900 Subject: [PATCH 4/5] =?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 From 5890f9932b47d26236459234b198608a8a0e2056 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 14 Feb 2024 00:02:17 +0900 Subject: [PATCH 5/5] =?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=B4=9D=20=EA=B0=9C=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/AudioContentRepository.kt | 32 +++++++++++++++++++ .../content/theme/AudioContentThemeService.kt | 7 ++++ .../content/GetContentByThemeResponse.kt | 1 + 3 files changed, 40 insertions(+) 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 b896e68..f7a02fb 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -68,6 +68,12 @@ interface AudioContentQueryRepository { limit: Long = 20 ): List + fun totalCountByTheme( + memberId: Long, + theme: String = "", + isAdult: Boolean = false + ): Int + fun findByThemeFor2Weeks( cloudfrontHost: String, memberId: Long, @@ -367,6 +373,32 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) .fetch() } + override fun totalCountByTheme(memberId: Long, theme: String, isAdult: Boolean): Int { + var where = audioContent.isActive.isTrue + .and( + audioContent.releaseDate.isNull + .or(audioContent.releaseDate.loe(LocalDateTime.now())) + .or(audioContent.member.id.eq(memberId)) + ) + + if (!isAdult) { + where = where.and(audioContent.isAdult.isFalse) + } + + if (theme.isNotBlank()) { + where = where.and(audioContentTheme.theme.eq(theme)) + } + + return queryFactory + .select(audioContent.id) + .from(audioContent) + .innerJoin(audioContent.member, member) + .innerJoin(audioContent.theme, audioContentTheme) + .where(where) + .fetch() + .size + } + override fun totalCountNewContentFor2Weeks(theme: String, memberId: Long, isAdult: Boolean): Int { var where = audioContent.isActive.isTrue .and(audioContent.releaseDate.goe(LocalDateTime.now().minusWeeks(2))) 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 cbee2f4..64f600b 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 @@ -35,6 +35,12 @@ class AudioContentThemeService( val theme = queryRepository.findThemeByIdAndActive(themeId) ?: throw SodaException("잘못된 요청입니다.") + val totalCount = contentRepository.totalCountByTheme( + memberId = member.id!!, + theme = theme.theme, + isAdult = member.auth != null + ) + val items = contentRepository.findByTheme( cloudfrontHost = imageHost, memberId = member.id!!, @@ -50,6 +56,7 @@ class AudioContentThemeService( return GetContentByThemeResponse( theme = theme.theme, + totalCount = totalCount, items = items ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt index 59c4154..2776363 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/theme/content/GetContentByThemeResponse.kt @@ -4,5 +4,6 @@ import kr.co.vividnext.sodalive.content.main.GetAudioContentMainItem data class GetContentByThemeResponse( val theme: String, + val totalCount: Int, val items: List )