Compare commits

..

4 Commits

3 changed files with 50 additions and 18 deletions

View File

@ -3,7 +3,7 @@
## 0.11.14 ## 0.11.14
* `Pagination`: * `Pagination`:
* `PaginationResult` got new field `objectsCount` which by default is a times between `pagesNumber` and `size` * `PaginationResult` got new field `objectsNumber` which by default is a times between `pagesNumber` and `size`
## 0.11.13 ## 0.11.13

View File

@ -1,24 +1,60 @@
package dev.inmo.micro_utils.pagination package dev.inmo.micro_utils.pagination
import kotlinx.serialization.Serializable import kotlinx.serialization.*
import kotlin.math.ceil
/**
* @param page Current page number
* @param size Current page size. It can be greater than size of [results]
* @param results Result objects
* @param objectsNumber Count of all objects across all pages
*/
@Serializable @Serializable
data class PaginationResult<T>( data class PaginationResult<T>(
override val page: Int, override val page: Int,
val pagesNumber: Int,
val results: List<T>,
override val size: Int, override val size: Int,
val objectsCount: Long = pagesNumber * size.toLong() val results: List<T>,
) : Pagination val objectsNumber: Long
) : Pagination {
/**
* Amount of pages for current pagination
*/
@EncodeDefault
val pagesNumber: Int = ceil(objectsNumber / size.toFloat()).toInt()
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0) constructor(
page: Int,
results: List<T>,
pagesNumber: Int,
size: Int
) : this(
page,
size,
results,
(pagesNumber * size).toLong()
)
@Deprecated("Replace with The other order of incoming parameters or objectsCount parameter")
constructor(
page: Int,
pagesNumber: Int,
results: List<T>,
size: Int
) : this(
page,
results,
pagesNumber,
size
)
}
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0L)
/** /**
* @return New [PaginationResult] with [data] without checking of data sizes equality * @return New [PaginationResult] with [data] without checking of data sizes equality
*/ */
fun <I, O> PaginationResult<I>.changeResultsUnchecked( fun <I, O> PaginationResult<I>.changeResultsUnchecked(
data: List<O> data: List<O>
): PaginationResult<O> = PaginationResult(page, pagesNumber, data, size) ): PaginationResult<O> = PaginationResult(page, size, data, objectsNumber)
/** /**
* @return New [PaginationResult] with [data] <b>with</b> checking of data sizes equality * @return New [PaginationResult] with [data] <b>with</b> checking of data sizes equality
*/ */
@ -34,12 +70,8 @@ fun <T> List<T>.createPaginationResult(
commonObjectsNumber: Long commonObjectsNumber: Long
) = PaginationResult( ) = PaginationResult(
pagination.page, pagination.page,
calculatePagesNumber(
commonObjectsNumber,
pagination.size
),
this,
pagination.size, pagination.size,
this,
commonObjectsNumber commonObjectsNumber
) )
@ -48,12 +80,8 @@ fun <T> List<T>.createPaginationResult(
commonObjectsNumber: Long commonObjectsNumber: Long
) = PaginationResult( ) = PaginationResult(
calculatePage(firstIndex, size), calculatePage(firstIndex, size),
calculatePagesNumber(
commonObjectsNumber,
size
),
this,
size, size,
this,
commonObjectsNumber commonObjectsNumber
) )

View File

@ -26,6 +26,10 @@ inline fun Pagination.nextPage() =
size size
) )
/**
* @param page Current page number
* @param size Current page size
*/
@Serializable @Serializable
data class SimplePagination( data class SimplePagination(
override val page: Int, override val page: Int,