add server utils
This commit is contained in:
parent
6d6bed2eb0
commit
8104678a99
@ -4,9 +4,8 @@ import com.insanusmokrassar.postssystem.core.content.ContentId
|
|||||||
import com.insanusmokrassar.postssystem.core.content.RegisteredContent
|
import com.insanusmokrassar.postssystem.core.content.RegisteredContent
|
||||||
import com.insanusmokrassar.postssystem.core.content.api.ReadContentRepo
|
import com.insanusmokrassar.postssystem.core.content.api.ReadContentRepo
|
||||||
import com.insanusmokrassar.postssystem.core.ktor.*
|
import com.insanusmokrassar.postssystem.core.ktor.*
|
||||||
|
import com.insanusmokrassar.postssystem.ktor.server.*
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator
|
import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.extractPagination
|
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.standardKtorSerialFormatContentType
|
|
||||||
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
||||||
import io.ktor.application.call
|
import io.ktor.application.call
|
||||||
import io.ktor.http.HttpStatusCode
|
import io.ktor.http.HttpStatusCode
|
||||||
@ -19,30 +18,25 @@ fun Route.configureReadContentRepoRoutes(
|
|||||||
proxyTo: ReadContentRepo
|
proxyTo: ReadContentRepo
|
||||||
) {
|
) {
|
||||||
get(getContentsIdsRoute) {
|
get(getContentsIdsRoute) {
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(contentIdsSerializer, proxyTo.getContentsIds()),
|
contentIdsSerializer,
|
||||||
standardKtorSerialFormatContentType
|
proxyTo.getContentsIds()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
get("$getContentByIdRoute/{id}") {
|
get("$getContentByIdRoute/{id}") {
|
||||||
val id: ContentId = call.parameters["id"].also {
|
val id: ContentId = call.getParameterOrSendError("id") ?: return@get
|
||||||
if (it == null) call.respond(HttpStatusCode.BadRequest, "Request must contains id in route")
|
|
||||||
} ?: return@get
|
call.unianswer(
|
||||||
call.respondBytes(
|
RegisteredContent.serializer().nullable,
|
||||||
standardKtorSerialFormat.dump(
|
proxyTo.getContentById(id)
|
||||||
RegisteredContent.serializer().nullable,
|
|
||||||
proxyTo.getContentById(id)
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
get(getContentByPaginationRoute) {
|
get(getContentByPaginationRoute) {
|
||||||
val pagination = call.request.queryParameters.extractPagination
|
val pagination = call.request.queryParameters.extractPagination
|
||||||
call.respondBytes(
|
|
||||||
standardKtorSerialFormat.dump(
|
call.unianswer(
|
||||||
registeredContentPaginationResultSerializer,
|
registeredContentPaginationResultSerializer,
|
||||||
proxyTo.getContentByPagination(pagination)
|
proxyTo.getContentByPagination(pagination)
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,8 @@ package com.insanusmokrassar.postssystem.core.ktor.server.content
|
|||||||
import com.insanusmokrassar.postssystem.core.content.*
|
import com.insanusmokrassar.postssystem.core.content.*
|
||||||
import com.insanusmokrassar.postssystem.core.content.api.WriteContentRepo
|
import com.insanusmokrassar.postssystem.core.content.api.WriteContentRepo
|
||||||
import com.insanusmokrassar.postssystem.core.ktor.*
|
import com.insanusmokrassar.postssystem.core.ktor.*
|
||||||
|
import com.insanusmokrassar.postssystem.ktor.server.*
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator
|
import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.includeWebsocketHandling
|
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.standardKtorSerialFormatContentType
|
|
||||||
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
||||||
import io.ktor.application.call
|
import io.ktor.application.call
|
||||||
import io.ktor.response.respondBytes
|
import io.ktor.response.respondBytes
|
||||||
@ -25,31 +24,19 @@ fun Route.configureWriteContentRepoRoutes(
|
|||||||
standardKtorSerialFormat.dump(RegisteredContent.serializer(), it)
|
standardKtorSerialFormat.dump(RegisteredContent.serializer(), it)
|
||||||
}
|
}
|
||||||
post(registerContentRoute) {
|
post(registerContentRoute) {
|
||||||
val content = standardKtorSerialFormat.load(
|
val content = call.uniload(Content.serializer())
|
||||||
Content.serializer(),
|
|
||||||
call.request.receiveChannel().toByteArray()
|
|
||||||
)
|
|
||||||
val registered = proxyTo.registerContent(content)
|
val registered = proxyTo.registerContent(content)
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(
|
RegisteredContent.serializer().nullable,
|
||||||
RegisteredContent.serializer().nullable,
|
registered
|
||||||
registered
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
post(deleteContentRoute) {
|
post(deleteContentRoute) {
|
||||||
val contentId = standardKtorSerialFormat.load(
|
val contentId = call.uniload(ContentId.serializer())
|
||||||
ContentId.serializer(),
|
|
||||||
call.request.receiveChannel().toByteArray()
|
|
||||||
)
|
|
||||||
val isDeleted = proxyTo.deleteContent(contentId)
|
val isDeleted = proxyTo.deleteContent(contentId)
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(
|
Boolean.serializer(),
|
||||||
Boolean.serializer(),
|
isDeleted
|
||||||
isDeleted
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,64 +22,44 @@ fun Route.configureReadPostsRepoRoutes(
|
|||||||
proxyTo: ReadPostsRepo
|
proxyTo: ReadPostsRepo
|
||||||
) {
|
) {
|
||||||
get(getPostsIdsRoute) {
|
get(getPostsIdsRoute) {
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(postIdsSerializer, proxyTo.getPostsIds()),
|
postIdsSerializer,
|
||||||
standardKtorSerialFormatContentType
|
proxyTo.getPostsIds()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
get("$getPostByIdRoute/{id}") {
|
get("$getPostByIdRoute/{id}") {
|
||||||
val id: PostId = call.parameters["id"].also {
|
val id: PostId = call.getParameterOrSendError("id") ?: return@get
|
||||||
if (it == null) {
|
call.unianswer(
|
||||||
call.respond(HttpStatusCode.BadRequest, "request must contains id")
|
RegisteredPost.serializer().nullable,
|
||||||
}
|
proxyTo.getPostById(id)
|
||||||
} ?: return@get
|
|
||||||
call.respondBytes(
|
|
||||||
standardKtorSerialFormat.dump(
|
|
||||||
RegisteredPost.serializer().nullable,
|
|
||||||
proxyTo.getPostById(id)
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
get("$getPostsByContentRoute/{id}") {
|
get("$getPostsByContentRoute/{id}") {
|
||||||
val id: ContentId = call.parameters["id"].also {
|
val id: ContentId = call.getParameterOrSendError("id") ?: return@get
|
||||||
if (it == null) {
|
call.unianswer(
|
||||||
call.respond(HttpStatusCode.BadRequest, "request must contains id")
|
registeredPostsListSerializer,
|
||||||
}
|
proxyTo.getPostsByContent(id)
|
||||||
} ?: return@get
|
|
||||||
call.respondBytes(
|
|
||||||
standardKtorSerialFormat.dump(
|
|
||||||
registeredPostsListSerializer,
|
|
||||||
proxyTo.getPostsByContent(id)
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
get(getPostsByCreatingDatesRoute) {
|
get(getPostsByCreatingDatesRoute) {
|
||||||
val fromToDateTime = call.request.queryParameters.extractFromToDateTime
|
val fromToDateTime = call.request.queryParameters.extractFromToDateTime
|
||||||
val pagination = call.request.queryParameters.extractPagination
|
val pagination = call.request.queryParameters.extractPagination
|
||||||
|
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(
|
registeredPostsPaginationResultSerializer,
|
||||||
registeredPostsPaginationResultSerializer,
|
proxyTo.getPostsByCreatingDates(
|
||||||
proxyTo.getPostsByCreatingDates(
|
fromToDateTime.first ?: MIN_DATE,
|
||||||
fromToDateTime.first ?: MIN_DATE,
|
fromToDateTime.second ?: MAX_DATE,
|
||||||
fromToDateTime.second ?: MAX_DATE,
|
pagination
|
||||||
pagination
|
)
|
||||||
)
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
get(getPostsByPaginationRoute) {
|
get(getPostsByPaginationRoute) {
|
||||||
val pagination = call.request.queryParameters.extractPagination
|
val pagination = call.request.queryParameters.extractPagination
|
||||||
|
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(
|
registeredPostsPaginationResultSerializer,
|
||||||
registeredPostsPaginationResultSerializer,
|
proxyTo.getPostsByPagination(pagination)
|
||||||
proxyTo.getPostsByPagination(pagination)
|
|
||||||
),
|
|
||||||
standardKtorSerialFormatContentType
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@ package com.insanusmokrassar.postssystem.core.ktor.server.post
|
|||||||
import com.insanusmokrassar.postssystem.core.ktor.*
|
import com.insanusmokrassar.postssystem.core.ktor.*
|
||||||
import com.insanusmokrassar.postssystem.core.post.*
|
import com.insanusmokrassar.postssystem.core.post.*
|
||||||
import com.insanusmokrassar.postssystem.core.post.repo.WritePostsRepo
|
import com.insanusmokrassar.postssystem.core.post.repo.WritePostsRepo
|
||||||
|
import com.insanusmokrassar.postssystem.ktor.server.*
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator
|
import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator
|
||||||
import com.insanusmokrassar.postssystem.ktor.server.includeWebsocketHandling
|
|
||||||
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
||||||
import io.ktor.application.call
|
import io.ktor.application.call
|
||||||
import io.ktor.response.respondBytes
|
import io.ktor.response.respondBytes
|
||||||
@ -27,43 +27,29 @@ fun Route.configureWritePostsRepoRoutes(
|
|||||||
}
|
}
|
||||||
|
|
||||||
post(createPostRoute) {
|
post(createPostRoute) {
|
||||||
val post = standardKtorSerialFormat.load(
|
call.unianswer(
|
||||||
Post.serializer(),
|
RegisteredPost.serializer().nullable,
|
||||||
call.request.receiveChannel().toByteArray()
|
proxyTo.createPost(
|
||||||
)
|
call.uniload(Post.serializer())
|
||||||
|
|
||||||
call.respondBytes(
|
|
||||||
standardKtorSerialFormat.dump(
|
|
||||||
RegisteredPost.serializer().nullable,
|
|
||||||
proxyTo.createPost(post)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
post(deletePostRoute) {
|
post(deletePostRoute) {
|
||||||
val postId = standardKtorSerialFormat.load(
|
call.unianswer(
|
||||||
PostId.serializer(),
|
Boolean.serializer(),
|
||||||
call.request.receiveChannel().toByteArray()
|
proxyTo.deletePost(call.uniload(PostId.serializer()))
|
||||||
)
|
|
||||||
|
|
||||||
call.respondBytes(
|
|
||||||
standardKtorSerialFormat.dump(
|
|
||||||
Boolean.serializer(),
|
|
||||||
proxyTo.deletePost(postId)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
post(updatePostContentRoute) {
|
post(updatePostContentRoute) {
|
||||||
val updatePostObject = standardKtorSerialFormat.load(
|
val updatePostObject = call.uniload(UpdatePostObject.serializer())
|
||||||
UpdatePostObject.serializer(),
|
|
||||||
call.request.receiveChannel().toByteArray()
|
|
||||||
)
|
|
||||||
|
|
||||||
call.respondBytes(
|
call.unianswer(
|
||||||
standardKtorSerialFormat.dump(
|
Boolean.serializer(),
|
||||||
Boolean.serializer(),
|
proxyTo.updatePostContent(
|
||||||
proxyTo.updatePostContent(updatePostObject.postId, updatePostObject.post)
|
updatePostObject.postId,
|
||||||
|
updatePostObject.post
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -75,5 +61,4 @@ class WritePostsRepoRoutingConfigurator(
|
|||||||
override fun Route.invoke() {
|
override fun Route.invoke() {
|
||||||
configureWritePostsRepoRoutes(proxyTo)
|
configureWritePostsRepoRoutes(proxyTo)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.insanusmokrassar.postssystem.ktor.server
|
||||||
|
|
||||||
|
import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
|
||||||
|
import io.ktor.application.ApplicationCall
|
||||||
|
import io.ktor.application.call
|
||||||
|
import io.ktor.http.HttpStatusCode
|
||||||
|
import io.ktor.response.respond
|
||||||
|
import io.ktor.response.respondBytes
|
||||||
|
import io.ktor.util.toByteArray
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
|
import kotlinx.serialization.SerializationStrategy
|
||||||
|
|
||||||
|
suspend fun <T> ApplicationCall.unianswer(
|
||||||
|
answerSerializer: SerializationStrategy<T>,
|
||||||
|
answer: T
|
||||||
|
) {
|
||||||
|
respondBytes(
|
||||||
|
standardKtorSerialFormat.dump(answerSerializer, answer),
|
||||||
|
standardKtorSerialFormatContentType
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun <T> ApplicationCall.uniload(
|
||||||
|
deserializer: DeserializationStrategy<T>
|
||||||
|
) = standardKtorSerialFormat.load(
|
||||||
|
deserializer,
|
||||||
|
request.receiveChannel().toByteArray()
|
||||||
|
)
|
||||||
|
|
||||||
|
suspend fun ApplicationCall.getParameterOrSendError(
|
||||||
|
field: String
|
||||||
|
) = parameters[field].also {
|
||||||
|
if (it == null) {
|
||||||
|
respond(HttpStatusCode.BadRequest, "request must contains $field")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user