44 lines
1.5 KiB
Kotlin
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)
|
|
}
|
|
}
|