exclude common parts from read modules
This commit is contained in:
parent
0178229175
commit
2fb346f6c7
@ -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")
|
||||||
|
@ -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")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user