크리에이터 관리자 API
- 시리즈 콘텐츠 API 추가
This commit is contained in:
		| @@ -69,4 +69,22 @@ class CreatorAdminContentSeriesController(private val service: CreatorAdminConte | ||||
|  | ||||
|         ApiResponse.ok(service.getDetail(id = id, memberId = member.id!!)) | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/{id}/content") | ||||
|     fun getSeriesContent( | ||||
|         @PathVariable id: Long, | ||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, | ||||
|         pageable: Pageable | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|  | ||||
|         ApiResponse.ok( | ||||
|             service.getSeriesContent( | ||||
|                 seriesId = id, | ||||
|                 offset = pageable.offset, | ||||
|                 limit = pageable.pageSize.toLong(), | ||||
|                 creatorId = member.id!! | ||||
|             ) | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| package kr.co.vividnext.sodalive.creator.admin.content.series | ||||
|  | ||||
| import com.querydsl.jpa.impl.JPAQueryFactory | ||||
| 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 org.springframework.data.jpa.repository.JpaRepository | ||||
|  | ||||
| interface CreatorAdminContentSeriesRepository : JpaRepository<Series, Long>, CreatorAdminContentSeriesQueryRepository | ||||
| @@ -15,6 +17,14 @@ interface CreatorAdminContentSeriesQueryRepository { | ||||
|         creatorId: Long, | ||||
|         imageHost: String | ||||
|     ): List<GetCreatorAdminContentSeriesListItem> | ||||
|  | ||||
|     fun getSeriesContentCount(creatorId: Long): Int | ||||
|     fun getSeriesContentList( | ||||
|         offset: Long, | ||||
|         limit: Long, | ||||
|         creatorId: Long, | ||||
|         imageHost: String | ||||
|     ): List<GetCreatorAdminContentSeriesContentItem> | ||||
| } | ||||
|  | ||||
| class CreatorAdminContentSeriesQueryRepositoryImpl( | ||||
| @@ -66,4 +76,47 @@ class CreatorAdminContentSeriesQueryRepositoryImpl( | ||||
|             .limit(limit) | ||||
|             .fetch() | ||||
|     } | ||||
|  | ||||
|     override fun getSeriesContentCount(creatorId: Long): Int { | ||||
|         return queryFactory | ||||
|             .select(seriesContent.id) | ||||
|             .from(seriesContent) | ||||
|             .innerJoin(seriesContent.series, series) | ||||
|             .innerJoin(seriesContent.content, audioContent) | ||||
|             .where( | ||||
|                 series.member.id.eq(creatorId) | ||||
|                     .and(audioContent.member.id.eq(creatorId)) | ||||
|                     .and(series.isActive.isTrue) | ||||
|             ) | ||||
|             .fetch() | ||||
|             .size | ||||
|     } | ||||
|  | ||||
|     override fun getSeriesContentList( | ||||
|         offset: Long, | ||||
|         limit: Long, | ||||
|         creatorId: Long, | ||||
|         imageHost: String | ||||
|     ): List<GetCreatorAdminContentSeriesContentItem> { | ||||
|         return queryFactory | ||||
|             .select( | ||||
|                 QGetCreatorAdminContentSeriesContentItem( | ||||
|                     audioContent.id, | ||||
|                     audioContent.coverImage.prepend("/").prepend(imageHost), | ||||
|                     audioContent.title, | ||||
|                     audioContent.isAdult | ||||
|                 ) | ||||
|             ) | ||||
|             .from(seriesContent) | ||||
|             .innerJoin(seriesContent.series, series) | ||||
|             .innerJoin(seriesContent.content, audioContent) | ||||
|             .where( | ||||
|                 series.member.id.eq(creatorId) | ||||
|                     .and(audioContent.member.id.eq(creatorId)) | ||||
|                     .and(series.isActive.isTrue) | ||||
|             ) | ||||
|             .offset(offset) | ||||
|             .limit(limit) | ||||
|             .fetch() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -178,4 +178,21 @@ class CreatorAdminContentSeriesService( | ||||
|  | ||||
|         return series.toDetailResponse(imageHost = coverImageHost) | ||||
|     } | ||||
|  | ||||
|     fun getSeriesContent( | ||||
|         seriesId: Long, | ||||
|         offset: Long, | ||||
|         limit: Long, | ||||
|         creatorId: Long | ||||
|     ): GetCreatorAdminContentSeriesContentResponse { | ||||
|         val totalCount = repository.getSeriesContentCount(creatorId = creatorId) | ||||
|         val seriesContentList = repository.getSeriesContentList( | ||||
|             offset = offset, | ||||
|             limit = limit, | ||||
|             creatorId = creatorId, | ||||
|             imageHost = coverImageHost | ||||
|         ) | ||||
|  | ||||
|         return GetCreatorAdminContentSeriesContentResponse(totalCount, seriesContentList) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,15 @@ | ||||
| package kr.co.vividnext.sodalive.creator.admin.content.series | ||||
|  | ||||
| import com.querydsl.core.annotations.QueryProjection | ||||
|  | ||||
| data class GetCreatorAdminContentSeriesContentResponse( | ||||
|     val totalCount: Int, | ||||
|     val items: List<GetCreatorAdminContentSeriesContentItem> | ||||
| ) | ||||
|  | ||||
| data class GetCreatorAdminContentSeriesContentItem @QueryProjection constructor( | ||||
|     val contentId: Long, | ||||
|     val coverImage: String, | ||||
|     val title: String, | ||||
|     val isAdult: Boolean | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user