core/core/ktor/server/src/jvmMain/kotlin/dev/inmo/postssystem/core/ktor/server/content/WriteContentRepoRoutingConf...

44 lines
1.5 KiB
Kotlin

package dev.inmo.postssystem.core.ktor.server.content
import dev.inmo.postssystem.core.content.*
import dev.inmo.postssystem.core.content.api.WriteContentRepo
import dev.inmo.postssystem.core.ktor.*
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.configureWriteContentRepoRoutes(
proxyTo: WriteContentRepo
) {
includeWebsocketHandling(contentCreatedFlowRoute, proxyTo.contentCreatedFlow, RegisteredContent.serializer())
includeWebsocketHandling(contentDeletedFlowRoute, proxyTo.contentDeletedFlow, RegisteredContent.serializer())
post(registerContentRoute) {
val content = call.uniload(Content.serializer())
val registered = proxyTo.registerContent(content)
call.unianswer(
RegisteredContent.serializer().nullable,
registered
)
}
post(deleteContentRoute) {
val contentId = call.uniload(ContentId.serializer())
val isDeleted = proxyTo.deleteContent(contentId)
call.unianswer(
Boolean.serializer(),
isDeleted
)
}
}
class WriteContentRepoRoutingConfigurator(
private val proxyTo: WriteContentRepo
) : ApplicationRoutingConfigurator.Element {
override fun Route.invoke() {
configureWriteContentRepoRoutes(proxyTo)
}
}