feat(content): 콘텐츠 전체보기 조회 정책을 추가한다
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.content.overview.application
|
||||
|
||||
import kr.co.vividnext.sodalive.v2.api.content.overview.dto.ContentOverviewType
|
||||
|
||||
data class ContentOverviewPage(
|
||||
val page: Int,
|
||||
val size: Int
|
||||
) {
|
||||
val offset: Long = page.toLong() * size
|
||||
}
|
||||
|
||||
class ContentOverviewQueryPolicy {
|
||||
fun resolveType(type: String?): ContentOverviewType {
|
||||
return ContentOverviewType.from(type)
|
||||
}
|
||||
|
||||
fun createPage(page: Int?, size: Int?): ContentOverviewPage {
|
||||
val resolvedPage = (page ?: DEFAULT_PAGE).coerceAtLeast(DEFAULT_PAGE)
|
||||
val requestedSize = size ?: DEFAULT_SIZE
|
||||
val resolvedSize = if (requestedSize < MIN_SIZE) DEFAULT_SIZE else minOf(requestedSize, MAX_SIZE)
|
||||
return ContentOverviewPage(page = resolvedPage, size = resolvedSize)
|
||||
}
|
||||
|
||||
fun <T> pageItems(items: List<T>, page: ContentOverviewPage): List<T> {
|
||||
return items.take(page.size)
|
||||
}
|
||||
|
||||
fun <T> hasNext(items: List<T>, page: ContentOverviewPage): Boolean {
|
||||
return items.size > page.size
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val DEFAULT_PAGE = 0
|
||||
const val DEFAULT_SIZE = 20
|
||||
const val MIN_SIZE = 20
|
||||
const val MAX_SIZE = 50
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user