core/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/DefaultPostCreateUIModel.kt

31 lines
1.2 KiB
Kotlin

package dev.inmo.postssystem.services.posts.client.ui.create
import dev.inmo.postssystem.features.common.common.AbstractUIModel
import dev.inmo.postssystem.features.content.common.Content
import dev.inmo.postssystem.publicators.simple.client.SimplePublicatorService
import dev.inmo.postssystem.services.posts.common.FullNewPost
import dev.inmo.postssystem.services.posts.common.WritePostsService
import kotlinx.coroutines.delay
class DefaultPostCreateUIModel(
private val postCreationService: WritePostsService,
private val publicationService: SimplePublicatorService
) : PostCreateUIModel, AbstractUIModel<PostCreateUIState>(
PostCreateUIState.Init
) {
override suspend fun create(content: List<Content>) {
runCatching {
_currentState.value = PostCreateUIState.Uploading
val post = postCreationService.create(
FullNewPost(content)
) ?: return@runCatching
delay(1000L)
publicationService.publish(post.id)
}.onFailure {
_currentState.value = PostCreateUIState.Fail
}.onSuccess {
_currentState.value = PostCreateUIState.Completed
}
}
}