크리에이터 관리자 API

- 시리즈 콘텐츠 API 추가
This commit is contained in:
Klaus 2024-04-17 18:08:40 +09:00
parent 50f02892e3
commit b849de00dc
4 changed files with 103 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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