exclude common parts from read modules

This commit is contained in:
InsanusMokrassar 2019-10-17 17:43:51 +06:00
parent 0178229175
commit 2fb346f6c7
2 changed files with 26 additions and 16 deletions

View File

@ -3,7 +3,14 @@ package com.insanusmokrassar.postssystem.core.server
import com.insanusmokrassar.postssystem.core.post.Post import com.insanusmokrassar.postssystem.core.post.Post
import com.insanusmokrassar.postssystem.core.post.SimplePost import com.insanusmokrassar.postssystem.core.post.SimplePost
import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult
import io.ktor.application.ApplicationCall
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.response.respondText
import kotlinx.serialization.KSerializer
import kotlinx.serialization.internal.ArrayListSerializer import kotlinx.serialization.internal.ArrayListSerializer
import kotlinx.serialization.json.Json
internal val postsSerializer = ArrayListSerializer(SimplePost.serializer()) internal val postsSerializer = ArrayListSerializer(SimplePost.serializer())
@ -19,3 +26,14 @@ internal val Post.asSimplePost
is SimplePost -> this is SimplePost -> this
else -> SimplePost(id, content, meta) else -> SimplePost(id, content, meta)
} }
internal suspend fun <T> ApplicationCall.answer(
serializer: KSerializer<T>,
answerObject: T
) = respondText(ContentType.Application.Json) {
Json.plain.stringify(serializer, answerObject)
}
internal suspend fun ApplicationCall.answerBadRequest(
mustBeProvided: String
) = respond(HttpStatusCode.BadRequest, "$mustBeProvided must be provided as body of request")

View File

@ -24,29 +24,23 @@ fun Route.includePostsCoreReadModules(readPostsAPI: ReadPostsAPI) {
val post = readPostsAPI.getPostById(id) val post = readPostsAPI.getPostById(id)
post ?.let { post ?.let {
val simplePost = post.asSimplePost val simplePost = post.asSimplePost
call.respondText(ContentType.Application.Json) { call.answer(SimplePost.serializer(), simplePost)
Json.plain.stringify(SimplePost.serializer(), simplePost)
}
} ?: call.respond(HttpStatusCode.NotFound, "Not found") } ?: call.respond(HttpStatusCode.NotFound, "Not found")
} ?: call.respond(HttpStatusCode.BadRequest, "Id of post must be provided as body of request") } ?: call.answerBadRequest("Id of post")
} }
post(getPostsByContentIdAddress) { post(getPostsByContentIdAddress) {
call.receiveOrNull(ContentId::class) ?.also { id -> call.receiveOrNull(ContentId::class) ?.also { id ->
val posts = readPostsAPI.getPostsByContent(id) val posts = readPostsAPI.getPostsByContent(id)
val simplePosts = posts.asSimplePostList val simplePosts = posts.asSimplePostList
call.respondText(ContentType.Application.Json) { call.answer(postsSerializer, simplePosts)
Json.plain.stringify(postsSerializer, simplePosts) } ?: call.answerBadRequest("Id of content")
}
} ?: call.respond(HttpStatusCode.BadRequest, "Id of content must be provided as body of request")
} }
post(getPostsByDatesAddress) { post(getPostsByDatesAddress) {
call.receiveOrNull<DateTimeRequest>() ?.also { (from, to) -> call.receiveOrNull<DateTimeRequest>() ?.also { (from, to) ->
val posts = readPostsAPI.getPostsByDates(from ?.let { DateTime(it) }, to ?.let { DateTime(it) }) val posts = readPostsAPI.getPostsByDates(from ?.let { DateTime(it) }, to ?.let { DateTime(it) })
val simplePosts = posts.asSimplePostList val simplePosts = posts.asSimplePostList
call.respondText(ContentType.Application.Json) { call.answer(postsSerializer, simplePosts)
Json.plain.stringify(postsSerializer, simplePosts) } ?: call.answerBadRequest("Object \"DateTimeRequest\"")
}
} ?: call.respond(HttpStatusCode.BadRequest, "Object \"DateTimeRequest\" must be provided as body of request")
} }
post(getPostsByPaginationAddress) { post(getPostsByPaginationAddress) {
call.receiveOrNull<PaginationRequest>() ?.also { pagination -> call.receiveOrNull<PaginationRequest>() ?.also { pagination ->
@ -58,9 +52,7 @@ fun Route.includePostsCoreReadModules(readPostsAPI: ReadPostsAPI) {
simplePosts simplePosts
) )
} }
call.respondText(ContentType.Application.Json) { call.answer(paginationResultSerializer, paginationResult)
Json.plain.stringify(paginationResultSerializer, paginationResult) } ?: call.answerBadRequest("Object \"PaginationRequest\"")
}
} ?: call.respond(HttpStatusCode.BadRequest, "Object \"PaginationRequest\" must be provided as body of request")
} }
} }