크리에이터 관리자 API
- 시리즈 리스트 API 추가
This commit is contained in:
		| @@ -3,9 +3,11 @@ package kr.co.vividnext.sodalive.creator.admin.content.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.lang.Nullable | ||||
| 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.PostMapping | ||||
| import org.springframework.web.bind.annotation.PutMapping | ||||
| import org.springframework.web.bind.annotation.RequestMapping | ||||
| @@ -40,4 +42,20 @@ class CreatorAdminContentSeriesController(private val service: CreatorAdminConte | ||||
|  | ||||
|         ApiResponse.ok(service.modifySeries(image, requestString, member), "시리즈가 수정되었습니다.") | ||||
|     } | ||||
|  | ||||
|     @GetMapping | ||||
|     fun getSeriesList( | ||||
|         pageable: Pageable, | ||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|  | ||||
|         ApiResponse.ok( | ||||
|             service.getSeriesList( | ||||
|                 offset = pageable.offset, | ||||
|                 limit = pageable.pageSize.toLong(), | ||||
|                 creatorId = member.id!! | ||||
|             ) | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -8,6 +8,13 @@ interface CreatorAdminContentSeriesRepository : JpaRepository<Series, Long>, Cre | ||||
|  | ||||
| interface CreatorAdminContentSeriesQueryRepository { | ||||
|     fun findByIdAndCreatorId(id: Long, creatorId: Long): Series? | ||||
|     fun getSeriesCount(creatorId: Long): Int | ||||
|     fun getSeriesList( | ||||
|         offset: Long, | ||||
|         limit: Long, | ||||
|         creatorId: Long, | ||||
|         imageHost: String | ||||
|     ): List<GetCreatorAdminContentSeriesListItem> | ||||
| } | ||||
|  | ||||
| class CreatorAdminContentSeriesQueryRepositoryImpl( | ||||
| @@ -22,4 +29,41 @@ class CreatorAdminContentSeriesQueryRepositoryImpl( | ||||
|             ) | ||||
|             .fetchFirst() | ||||
|     } | ||||
|  | ||||
|     override fun getSeriesCount(creatorId: Long): Int { | ||||
|         return queryFactory | ||||
|             .select(series.id) | ||||
|             .from(series) | ||||
|             .where( | ||||
|                 series.member.id.eq(creatorId) | ||||
|                     .and(series.isActive.isTrue) | ||||
|             ) | ||||
|             .fetch() | ||||
|             .size | ||||
|     } | ||||
|  | ||||
|     override fun getSeriesList( | ||||
|         offset: Long, | ||||
|         limit: Long, | ||||
|         creatorId: Long, | ||||
|         imageHost: String | ||||
|     ): List<GetCreatorAdminContentSeriesListItem> { | ||||
|         return queryFactory | ||||
|             .select( | ||||
|                 QGetCreatorAdminContentSeriesListItem( | ||||
|                     series.id, | ||||
|                     series.title, | ||||
|                     series.coverImage.prepend("/").prepend(imageHost) | ||||
|                 ) | ||||
|             ) | ||||
|             .from(series) | ||||
|             .where( | ||||
|                 series.member.id.eq(creatorId) | ||||
|                     .and(series.isActive.isTrue) | ||||
|             ) | ||||
|             .orderBy(series.id.desc()) | ||||
|             .offset(offset) | ||||
|             .limit(limit) | ||||
|             .fetch() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -25,7 +25,10 @@ class CreatorAdminContentSeriesService( | ||||
|     private val objectMapper: ObjectMapper, | ||||
|  | ||||
|     @Value("\${cloud.aws.s3.bucket}") | ||||
|     private val coverImageBucket: String | ||||
|     private val coverImageBucket: String, | ||||
|  | ||||
|     @Value("\${cloud.aws.cloud-front.host}") | ||||
|     private val coverImageHost: String | ||||
| ) { | ||||
|     @Transactional | ||||
|     fun createSeries(coverImage: MultipartFile?, requestString: String, member: Member) { | ||||
| @@ -156,4 +159,16 @@ class CreatorAdminContentSeriesService( | ||||
|             series.studio = request.studio | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     fun getSeriesList(offset: Long, limit: Long, creatorId: Long): GetCreatorAdminContentSeriesListResponse { | ||||
|         val totalCount = repository.getSeriesCount(creatorId = creatorId) | ||||
|         val seriesList = repository.getSeriesList( | ||||
|             offset = offset, | ||||
|             limit = limit, | ||||
|             creatorId = creatorId, | ||||
|             imageHost = coverImageHost | ||||
|         ) | ||||
|  | ||||
|         return GetCreatorAdminContentSeriesListResponse(totalCount, seriesList) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,14 @@ | ||||
| package kr.co.vividnext.sodalive.creator.admin.content.series | ||||
|  | ||||
| import com.querydsl.core.annotations.QueryProjection | ||||
|  | ||||
| data class GetCreatorAdminContentSeriesListResponse( | ||||
|     val totalCount: Int, | ||||
|     val items: List<GetCreatorAdminContentSeriesListItem> | ||||
| ) | ||||
|  | ||||
| data class GetCreatorAdminContentSeriesListItem @QueryProjection constructor( | ||||
|     val seriesId: Long, | ||||
|     val title: String, | ||||
|     val coverImageUrl: String | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user