parent
50f02892e3
commit
b849de00dc
|
@ -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
|
||||
)
|
Loading…
Reference in New Issue