50 lines
1.6 KiB
Kotlin
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)
|
|
}
|
|
}
|