56 lines
2.0 KiB
Kotlin
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
|
|
)
|
|
} |