57 lines
1.8 KiB
Kotlin
57 lines
1.8 KiB
Kotlin
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)
|
|
}
|
|
}
|