package dev.inmo.postssystem.core.ktor.server.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.server.* import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator import io.ktor.application.call import io.ktor.routing.Route import io.ktor.routing.post import kotlinx.serialization.builtins.nullable import kotlinx.serialization.builtins.serializer fun Route.configureWritePostsRepoRoutes( proxyTo: WritePostsRepo ) { includeWebsocketHandling(postCreatedFlowRoute, proxyTo.postCreatedFlow, RegisteredPost.serializer()) includeWebsocketHandling(postDeletedFlowRoute, proxyTo.postDeletedFlow, RegisteredPost.serializer()) includeWebsocketHandling(postUpdatedFlowRoute, proxyTo.postUpdatedFlow, RegisteredPost.serializer()) post(createPostRoute) { call.unianswer( RegisteredPost.serializer().nullable, proxyTo.createPost( call.uniload(Post.serializer()) ) ) } post(deletePostRoute) { call.unianswer( Boolean.serializer(), proxyTo.deletePost(call.uniload(PostId.serializer())) ) } post(updatePostContentRoute) { val updatePostObject = call.uniload(UpdatePostObject.serializer()) call.unianswer( Boolean.serializer(), proxyTo.updatePostContent( updatePostObject.postId, updatePostObject.post ) ) } } class WritePostsRepoRoutingConfigurator( private val proxyTo: WritePostsRepo ) : ApplicationRoutingConfigurator.Element { override fun Route.invoke() { configureWritePostsRepoRoutes(proxyTo) } }