diff --git a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/DefaultPostCreateUIModel.kt b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/DefaultPostCreateUIModel.kt new file mode 100644 index 00000000..02cad97e --- /dev/null +++ b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/DefaultPostCreateUIModel.kt @@ -0,0 +1,25 @@ +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.services.posts.common.FullNewPost +import dev.inmo.postssystem.services.posts.common.WritePostsService + +class DefaultPostCreateUIModel( + private val postCreationService: WritePostsService +) : PostCreateUIModel, AbstractUIModel( + PostCreateUIState.Init +) { + override suspend fun create(content: List) { + runCatching { + _currentState.value = PostCreateUIState.Uploading + postCreationService.create( + FullNewPost(content) + ) + }.onFailure { + _currentState.value = PostCreateUIState.Fail + }.onSuccess { + _currentState.value = PostCreateUIState.Completed + } + } +} diff --git a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIModel.kt b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIModel.kt index 9922d73b..c1de12ee 100644 --- a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIModel.kt +++ b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIModel.kt @@ -1,8 +1,9 @@ package dev.inmo.postssystem.services.posts.client.ui.create import dev.inmo.postssystem.features.common.common.UIModel +import dev.inmo.postssystem.features.common.common.UIViewModel import dev.inmo.postssystem.features.content.common.Content -interface PostCreateUIModel : UIModel { +interface PostCreateUIModel : UIModel, UIViewModel { suspend fun create(content: List) } diff --git a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIState.kt b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIState.kt index d8b32462..46925eed 100644 --- a/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIState.kt +++ b/services/posts/client/src/commonMain/kotlin/dev/inmo/postssystem/services/posts/client/ui/create/PostCreateUIState.kt @@ -9,6 +9,8 @@ sealed class PostCreateUIState { @Serializable object Uploading : PostCreateUIState() @Serializable + object Fail : PostCreateUIState() + @Serializable object Completed : PostCreateUIState() }