parent
50f02892e3
commit
b849de00dc
|
@ -69,4 +69,22 @@ class CreatorAdminContentSeriesController(private val service: CreatorAdminConte
|
||||||
|
|
||||||
ApiResponse.ok(service.getDetail(id = id, memberId = member.id!!))
|
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
|
package kr.co.vividnext.sodalive.creator.admin.content.series
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
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.QSeries.series
|
||||||
|
import kr.co.vividnext.sodalive.creator.admin.content.series.QSeriesContent.seriesContent
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
|
|
||||||
interface CreatorAdminContentSeriesRepository : JpaRepository<Series, Long>, CreatorAdminContentSeriesQueryRepository
|
interface CreatorAdminContentSeriesRepository : JpaRepository<Series, Long>, CreatorAdminContentSeriesQueryRepository
|
||||||
|
@ -15,6 +17,14 @@ interface CreatorAdminContentSeriesQueryRepository {
|
||||||
creatorId: Long,
|
creatorId: Long,
|
||||||
imageHost: String
|
imageHost: String
|
||||||
): List<GetCreatorAdminContentSeriesListItem>
|
): List<GetCreatorAdminContentSeriesListItem>
|
||||||
|
|
||||||
|
fun getSeriesContentCount(creatorId: Long): Int
|
||||||
|
fun getSeriesContentList(
|
||||||
|
offset: Long,
|
||||||
|
limit: Long,
|
||||||
|
creatorId: Long,
|
||||||
|
imageHost: String
|
||||||
|
): List<GetCreatorAdminContentSeriesContentItem>
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreatorAdminContentSeriesQueryRepositoryImpl(
|
class CreatorAdminContentSeriesQueryRepositoryImpl(
|
||||||
|
@ -66,4 +76,47 @@ class CreatorAdminContentSeriesQueryRepositoryImpl(
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.fetch()
|
.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)
|
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