50 lines
1.8 KiB
Kotlin
50 lines
1.8 KiB
Kotlin
package dev.inmo.postssystem.core.ktor.client.post
|
|
|
|
import dev.inmo.postssystem.core.ktor.*
|
|
import dev.inmo.postssystem.core.post.*
|
|
import dev.inmo.postssystem.core.post.repo.WritePostsRepo
|
|
import dev.inmo.micro_utils.ktor.client.*
|
|
import io.ktor.client.HttpClient
|
|
import io.ktor.client.features.websocket.WebSockets
|
|
import kotlinx.coroutines.flow.Flow
|
|
import kotlinx.serialization.builtins.nullable
|
|
import kotlinx.serialization.builtins.serializer
|
|
|
|
class WritePostsRepoKtorClient (
|
|
private val baseUrl: String,
|
|
private val client: HttpClient = HttpClient {
|
|
install(WebSockets)
|
|
}
|
|
) : WritePostsRepo {
|
|
override val postCreatedFlow: Flow<RegisteredPost> = client.createStandardWebsocketFlow(
|
|
"$baseUrl/$postCreatedFlowRoute",
|
|
deserializer = RegisteredPost.serializer()
|
|
)
|
|
override val postDeletedFlow: Flow<RegisteredPost> = client.createStandardWebsocketFlow(
|
|
"$baseUrl/$postDeletedFlowRoute",
|
|
deserializer = RegisteredPost.serializer()
|
|
)
|
|
override val postUpdatedFlow: Flow<RegisteredPost> = client.createStandardWebsocketFlow(
|
|
"$baseUrl/$postUpdatedFlowRoute",
|
|
deserializer = RegisteredPost.serializer()
|
|
)
|
|
|
|
override suspend fun createPost(post: Post): RegisteredPost? = client.unipost(
|
|
"$baseUrl/$createPostRoute",
|
|
BodyPair(Post.serializer(), post),
|
|
RegisteredPost.serializer().nullable
|
|
)
|
|
|
|
override suspend fun deletePost(id: PostId): Boolean = client.unipost(
|
|
"$baseUrl/$deletePostRoute",
|
|
BodyPair(PostId.serializer(), id),
|
|
Boolean.serializer()
|
|
)
|
|
|
|
override suspend fun updatePostContent(postId: PostId, post: Post): Boolean = client.unipost(
|
|
"$baseUrl/$updatePostContentRoute",
|
|
BodyPair(UpdatePostObject.serializer(), UpdatePostObject(postId, post)),
|
|
Boolean.serializer()
|
|
)
|
|
}
|