diff --git a/src/main/kotlin/dev/usbharu/hideout/application/infrastructure/exposed/ExposedPaginationExtension.kt b/src/main/kotlin/dev/usbharu/hideout/application/infrastructure/exposed/ExposedPaginationExtension.kt index f00d9dcb..611d19bd 100644 --- a/src/main/kotlin/dev/usbharu/hideout/application/infrastructure/exposed/ExposedPaginationExtension.kt +++ b/src/main/kotlin/dev/usbharu/hideout/application/infrastructure/exposed/ExposedPaginationExtension.kt @@ -1,9 +1,6 @@ package dev.usbharu.hideout.application.infrastructure.exposed -import org.jetbrains.exposed.sql.ExpressionWithColumnType -import org.jetbrains.exposed.sql.Query -import org.jetbrains.exposed.sql.SortOrder -import org.jetbrains.exposed.sql.andWhere +import org.jetbrains.exposed.sql.* fun Query.pagination(page: Page, exp: ExpressionWithColumnType): Query { if (page.minId != null) { @@ -17,3 +14,19 @@ fun Query.pagination(page: Page, exp: ExpressionWithColumnType): Query { page.limit?.let { limit(it) } return this } + +fun Query.withPagination(page: Page, exp: ExpressionWithColumnType): PaginationList { + page.limit?.let { limit(it) } + val resultRows = if (page.minId != null) { + page.maxId?.let { andWhere { exp.less(it) } } + page.minId?.let { andWhere { exp.greater(it) } } + reversed() + } else { + page.maxId?.let { andWhere { exp.less(it) } } + page.sinceId?.let { andWhere { exp.greater(it) } } + orderBy(exp, SortOrder.DESC) + toList() + } + + return PaginationList(resultRows, resultRows.firstOrNull()?.getOrNull(exp), resultRows.lastOrNull()?.getOrNull(exp)) +} \ No newline at end of file