From f2d66b2fe98ce355ba355914b126230c81597e39 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 4 Nov 2019 20:35:24 +0600 Subject: [PATCH] small refactoring --- .../core/utils/pagination/Pagination.kt | 9 +++++++-- .../core/utils/pagination/PaginationResult.kt | 17 ++++++++++++----- .../postssystem/core/api/InMemoryContentAPI.kt | 17 ++++++----------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/Pagination.kt b/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/Pagination.kt index c58d4953..c904b3ce 100644 --- a/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/Pagination.kt +++ b/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/Pagination.kt @@ -39,6 +39,11 @@ val Pagination.lastIndex: Int /** * Calculates pages count for given [datasetSize] */ -fun Pagination.pagesCount(datasetSize: Int): Int { - return ceil(datasetSize.toDouble() / size).toInt() +fun calculatePagesNumber(datasetSize: Int, pageSize: Int): Int { + return ceil(datasetSize.toDouble() / pageSize).toInt() } + +/** + * Calculates pages count for given [datasetSize] + */ +inline fun Pagination.calculatePagesNumber(datasetSize: Int): Int = calculatePagesNumber(datasetSize, size) diff --git a/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationResult.kt b/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationResult.kt index 67f3e855..9808f22d 100644 --- a/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationResult.kt +++ b/core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationResult.kt @@ -1,14 +1,21 @@ package com.insanusmokrassar.postssystem.core.utils.pagination import kotlinx.serialization.Serializable -import kotlinx.serialization.Transient @Serializable data class PaginationResult( override val page: Int, val pagesNumber: Int, - val results: List -) : Pagination { - @Transient + val results: List, override val size: Int = results.size -} +) : Pagination + +fun Pagination.createResult( + commonObjectsNumber: Int, + results: List +) = PaginationResult( + page, + calculatePagesNumber(commonObjectsNumber), + results, + size +) diff --git a/core/src/test/kotlin/com/insanusmokrassar/postssystem/core/api/InMemoryContentAPI.kt b/core/src/test/kotlin/com/insanusmokrassar/postssystem/core/api/InMemoryContentAPI.kt index 795db98d..00c101dc 100644 --- a/core/src/test/kotlin/com/insanusmokrassar/postssystem/core/api/InMemoryContentAPI.kt +++ b/core/src/test/kotlin/com/insanusmokrassar/postssystem/core/api/InMemoryContentAPI.kt @@ -2,10 +2,7 @@ package com.insanusmokrassar.postssystem.core.api import com.insanusmokrassar.postssystem.core.content.* import com.insanusmokrassar.postssystem.core.content.api.ContentAPI -import com.insanusmokrassar.postssystem.core.utils.pagination.Pagination -import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult -import com.insanusmokrassar.postssystem.core.utils.pagination.firstIndex -import com.insanusmokrassar.postssystem.core.utils.pagination.pagesCount +import com.insanusmokrassar.postssystem.core.utils.pagination.* import kotlinx.coroutines.channels.BroadcastChannel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow @@ -20,6 +17,8 @@ private fun generateId(): ContentId = UUID.randomUUID().toString() class InMemoryContentAPI( initialContent: List = emptyList() ): ContentAPI { + private val contentCreatedBroadcastChannel = BroadcastChannel(Channel.BUFFERED) + private val contentDeletedBroadcastChannel = BroadcastChannel(Channel.BUFFERED) override val contentCreatedFlow: Flow get() = contentCreatedBroadcastChannel.asFlow() @@ -31,9 +30,6 @@ class InMemoryContentAPI( .associateBy(RegisteredContent::id) .toMutableMap() - private val contentCreatedBroadcastChannel = BroadcastChannel(Channel.BUFFERED) - private val contentDeletedBroadcastChannel = BroadcastChannel(Channel.BUFFERED) - override suspend fun createContent(content: Content): RegisteredContent? { return content.createRegisteredEntity(generateId())?.also { registeredContent -> contents[registeredContent.id] = registeredContent @@ -44,10 +40,9 @@ class InMemoryContentAPI( override suspend fun getContentById(id: ContentId): RegisteredContent? = contents[id] override suspend fun getContentByPagination(pagination: Pagination): PaginationResult { - return PaginationResult( - page = pagination.page, - pagesNumber = pagination.pagesCount(contents.size), - results = contents.values.drop(pagination.firstIndex).take(pagination.size) + return pagination.createResult( + commonObjectsNumber = contents.size, + results = contents.values.asSequence().drop(pagination.firstIndex).take(pagination.size).toList() ) }