core/core/ktor/server/src/jvmMain/kotlin/dev/inmo/postssystem/core/ktor/server/post/ReadPostsRepoRoutingConfigu...

71 lines
2.3 KiB
Kotlin

package dev.inmo.postssystem.core.ktor.server.post
import dev.inmo.postssystem.core.MAX_DATE
import dev.inmo.postssystem.core.MIN_DATE
import dev.inmo.postssystem.core.content.ContentId
import dev.inmo.postssystem.core.ktor.*
import dev.inmo.postssystem.core.post.PostId
import dev.inmo.postssystem.core.post.RegisteredPost
import dev.inmo.postssystem.core.post.repo.ReadPostsRepo
import dev.inmo.micro_utils.ktor.server.*
import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator
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.configureReadPostsRepoRoutes(
proxyTo: ReadPostsRepo
) {
get(getPostsIdsRoute) {
call.unianswer(
postIdsSerializer,
proxyTo.getPostsIds()
)
}
get("$getPostByIdRoute/{id}") {
val id: PostId = call.getParameterOrSendError("id") ?: return@get
call.unianswer(
RegisteredPost.serializer().nullable,
proxyTo.getPostById(id)
)
}
get("$getPostsByContentRoute/{id}") {
val id: ContentId = call.getParameterOrSendError("id") ?: return@get
call.unianswer(
registeredPostsListSerializer,
proxyTo.getPostsByContent(id)
)
}
get(getPostsByCreatingDatesRoute) {
val fromToDateTime = call.request.queryParameters.extractFromToDateTime
val pagination = call.request.queryParameters.extractPagination
call.unianswer(
registeredPostsPaginationResultSerializer,
proxyTo.getPostsByCreatingDates(
fromToDateTime.first ?: MIN_DATE,
fromToDateTime.second ?: MAX_DATE,
pagination
)
)
}
get(getPostsByPaginationRoute) {
val pagination = call.request.queryParameters.extractPagination
call.unianswer(
registeredPostsPaginationResultSerializer,
proxyTo.getPostsByPagination(pagination)
)
}
}
class ReadPostsRepoRoutingConfigurator(
private val proxyTo: ReadPostsRepo
) : ApplicationRoutingConfigurator.Element {
override fun Route.invoke() {
configureReadPostsRepoRoutes(proxyTo)
}
}