71 lines
2.3 KiB
Kotlin
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)
|
|
}
|
|
}
|