diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt index 5811af9..bdf74a5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/ContentSeriesController.kt @@ -50,6 +50,7 @@ class ContentSeriesController(private val service: ContentSeriesService) { @GetMapping("/{id}/content") fun getSeriesContentList( @PathVariable id: Long, + @RequestParam("sortType", defaultValue = "NEWEST") sortType: SeriesSortType, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -59,6 +60,7 @@ class ContentSeriesController(private val service: ContentSeriesService) { service.getSeriesContentList( seriesId = id, member = member, + sortType = sortType, offset = pageable.offset, limit = pageable.pageSize.toLong() ) 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 1cefd7c..665eb2e 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 @@ -75,7 +75,13 @@ class ContentSeriesService( val rentalMinPrice = (minMaxPrice.minPrice * 0.6).toInt() val rentalMaxPrice = (minMaxPrice.maxPrice * 0.6).toInt() - val seriesContentList = getSeriesContentList(seriesId = seriesId, member = member, offset = 0, limit = 5) + val seriesContentList = getSeriesContentList( + seriesId = seriesId, + member = member, + sortType = SeriesSortType.NEWEST, + offset = 0, + limit = 5 + ) val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd") return GetSeriesDetailResponse( @@ -110,7 +116,13 @@ class ContentSeriesService( ) } - fun getSeriesContentList(seriesId: Long, member: Member, offset: Long, limit: Long): GetSeriesContentListResponse { + fun getSeriesContentList( + seriesId: Long, + member: Member, + sortType: SeriesSortType, + offset: Long, + limit: Long + ): GetSeriesContentListResponse { val isAdult = member.auth != null val totalCount = seriesContentRepository.getContentCount(seriesId, isAdult = isAdult) @@ -118,6 +130,7 @@ class ContentSeriesService( seriesId = seriesId, isAdult = isAdult, imageHost = coverImageHost, + sortType = sortType, offset = offset, limit = limit ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt index aa83137..36a6eae 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt @@ -6,6 +6,7 @@ import kr.co.vividnext.sodalive.content.QAudioContent.audioContent import kr.co.vividnext.sodalive.creator.admin.content.series.QSeries.series import kr.co.vividnext.sodalive.creator.admin.content.series.QSeriesContent.seriesContent import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesContent +import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesSortType import org.springframework.data.jpa.repository.JpaRepository import java.time.LocalDateTime @@ -17,6 +18,7 @@ interface ContentSeriesContentQueryRepository { seriesId: Long, isAdult: Boolean, imageHost: String, + sortType: SeriesSortType, offset: Long, limit: Long ): List @@ -49,6 +51,7 @@ class ContentSeriesContentQueryRepositoryImpl( seriesId: Long, isAdult: Boolean, imageHost: String, + sortType: SeriesSortType, offset: Long, limit: Long ): List { @@ -56,6 +59,12 @@ class ContentSeriesContentQueryRepositoryImpl( .and(audioContent.isActive.isTrue) .and(audioContent.duration.isNotNull) + var orderBy = seriesContent.createdAt.desc() + + if (sortType == SeriesSortType.OLDEST) { + orderBy = seriesContent.createdAt.asc() + } + if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) } @@ -89,7 +98,7 @@ class ContentSeriesContentQueryRepositoryImpl( .innerJoin(seriesContent.series, series) .innerJoin(seriesContent.content, audioContent) .where(where) - .orderBy(series.orders.asc(), series.createdAt.asc()) + .orderBy(orderBy) .offset(offset) .limit(limit) .fetch() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt index 79f4f1b..9e2d1d6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/series/Series.kt @@ -26,7 +26,7 @@ enum class SeriesState { } enum class SeriesSortType { - NEWEST, POPULAR + NEWEST, OLDEST } @Entity diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/EditLiveRoomInfoRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/EditLiveRoomInfoRequest.kt index bfa5f37..b6de7ad 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/EditLiveRoomInfoRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/EditLiveRoomInfoRequest.kt @@ -8,5 +8,6 @@ data class EditLiveRoomInfoRequest( val timezone: String?, val menuPanId: Long = 0, val menuPan: String = "", - val isActiveMenuPan: Boolean? = null + val isActiveMenuPan: Boolean? = null, + val isAdult: Boolean? = null ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index 32b0c0e..aa11031 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -749,6 +749,10 @@ class LiveRoomService( .toLocalDateTime() } + if (request.isAdult != null) { + room.isAdult = request.isAdult + } + if (request.isActiveMenuPan != null) { if (request.isActiveMenuPan) { if (request.menuPanId > 0) {