core/core/ktor/client/src/commonMain/kotlin/dev/inmo/postssystem/core/ktor/client/post/ReadPostsRepoKtorClient.kt

56 lines
2.0 KiB
Kotlin
Raw Normal View History

2020-11-25 08:08:45 +00:00
package dev.inmo.postssystem.core.ktor.client.post
2020-11-25 08:08:45 +00:00
import dev.inmo.postssystem.core.content.ContentId
import dev.inmo.postssystem.core.ktor.*
import dev.inmo.postssystem.core.post.PostId
import dev.inmo.postssystem.core.post.RegisteredPost
import dev.inmo.postssystem.core.post.repo.ReadPostsRepo
import com.soywiz.klock.DateTime
2020-11-25 07:53:15 +00:00
import dev.inmo.micro_utils.ktor.client.uniget
import dev.inmo.micro_utils.ktor.common.asFromToUrlPart
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import dev.inmo.micro_utils.pagination.*
import io.ktor.client.HttpClient
import kotlinx.serialization.builtins.nullable
class ReadPostsRepoKtorClient(
private val baseUrl: String,
private val client: HttpClient = HttpClient()
) : ReadPostsRepo {
override suspend fun getPostsIds(): Set<PostId> = client.uniget(
buildStandardUrl(baseUrl, getPostsIdsRoute),
postIdsSerializer
)
override suspend fun getPostById(id: PostId): RegisteredPost? = client.uniget(
buildStandardUrl(baseUrl, "$getPostByIdRoute/$id"),
RegisteredPost.serializer().nullable
)
override suspend fun getPostsByContent(id: ContentId): List<RegisteredPost> = client.uniget(
buildStandardUrl(baseUrl, "$getPostsByContentRoute/$id"),
registeredPostsListSerializer
)
override suspend fun getPostsByCreatingDates(
from: DateTime,
to: DateTime,
pagination: Pagination
): PaginationResult<RegisteredPost> = client.uniget(
buildStandardUrl(
baseUrl,
getPostsByCreatingDatesRoute,
(from to to).asFromToUrlPart + pagination.asUrlQueryParts
),
registeredPostsPaginationResultSerializer
)
override suspend fun getPostsByPagination(pagination: Pagination): PaginationResult<RegisteredPost> = client.uniget(
buildStandardUrl(
baseUrl,
getPostsByCreatingDatesRoute,
pagination.asUrlQueryParts
),
registeredPostsPaginationResultSerializer
)
}