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

56 lines
2.0 KiB
Kotlin

package dev.inmo.postssystem.core.ktor.client.post
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
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
)
}