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

71 lines
2.3 KiB
Kotlin
Raw Normal View History

2020-11-25 08:08:45 +00:00
package dev.inmo.postssystem.core.ktor.server.post
2020-11-25 08:08:45 +00:00
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
2020-11-25 07:53:15 +00:00
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) {
2020-08-14 12:30:09 +00:00
call.unianswer(
postIdsSerializer,
proxyTo.getPostsIds()
)
}
get("$getPostByIdRoute/{id}") {
2020-08-14 12:30:09 +00:00
val id: PostId = call.getParameterOrSendError("id") ?: return@get
call.unianswer(
RegisteredPost.serializer().nullable,
proxyTo.getPostById(id)
)
}
get("$getPostsByContentRoute/{id}") {
2020-08-14 12:30:09 +00:00
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
2020-08-14 12:30:09 +00:00
call.unianswer(
registeredPostsPaginationResultSerializer,
proxyTo.getPostsByCreatingDates(
fromToDateTime.first ?: MIN_DATE,
fromToDateTime.second ?: MAX_DATE,
pagination
)
)
}
get(getPostsByPaginationRoute) {
val pagination = call.request.queryParameters.extractPagination
2020-08-14 12:30:09 +00:00
call.unianswer(
registeredPostsPaginationResultSerializer,
proxyTo.getPostsByPagination(pagination)
)
}
}
class ReadPostsRepoRoutingConfigurator(
private val proxyTo: ReadPostsRepo
) : ApplicationRoutingConfigurator.Element {
override fun Route.invoke() {
configureReadPostsRepoRoutes(proxyTo)
}
}