크리에이터 관리자 API

- 시리즈 리스트 API 추가
This commit is contained in:
Klaus 2024-04-17 00:02:26 +09:00
parent 3b008155e1
commit 2a9eaead83
4 changed files with 92 additions and 1 deletions

View File

@ -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!!
)
)
}
}

View File

@ -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()
}
}

View File

@ -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)
}
}

View File

@ -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
)