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

50 lines
1.6 KiB
Kotlin

package dev.inmo.postssystem.core.ktor.server.content
import dev.inmo.postssystem.core.content.ContentId
import dev.inmo.postssystem.core.content.RegisteredContent
import dev.inmo.postssystem.core.content.api.ReadContentRepo
import dev.inmo.postssystem.core.ktor.*
import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator
import dev.inmo.micro_utils.ktor.server.getParameterOrSendError
import dev.inmo.micro_utils.ktor.server.unianswer
import dev.inmo.micro_utils.pagination.extractPagination
import io.ktor.application.call
import io.ktor.routing.Route
import io.ktor.routing.get
import kotlinx.serialization.builtins.nullable
fun Route.configureReadContentRepoRoutes(
proxyTo: ReadContentRepo
) {
get(getContentsIdsRoute) {
call.unianswer(
contentIdsSerializer,
proxyTo.getContentsIds()
)
}
get("$getContentByIdRoute/{id}") {
val id: ContentId = call.getParameterOrSendError("id") ?: return@get
call.unianswer(
RegisteredContent.serializer().nullable,
proxyTo.getContentById(id)
)
}
get(getContentByPaginationRoute) {
val pagination = call.request.queryParameters.extractPagination
call.unianswer(
registeredContentPaginationResultSerializer,
proxyTo.getContentByPagination(pagination)
)
}
}
class ReadContentRepoRoutingConfigurator(
private val proxyTo: ReadContentRepo
) : ApplicationRoutingConfigurator.Element {
override fun Route.invoke() {
configureReadContentRepoRoutes(proxyTo)
}
}