improve hierachi of classes for contents and posts

This commit is contained in:
2019-10-19 16:58:49 +06:00
parent 16311b8f1c
commit 0c98fe3dfb
11 changed files with 73 additions and 62 deletions

View File

@@ -1,7 +1,7 @@
package com.insanusmokrassar.postssystem.core.server
import com.insanusmokrassar.postssystem.core.post.Post
import com.insanusmokrassar.postssystem.core.post.SimplePost
import com.insanusmokrassar.postssystem.core.post.SimpleRegisteredPost
import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult
import io.ktor.application.ApplicationCall
import io.ktor.http.ContentType
@@ -15,8 +15,8 @@ import kotlinx.serialization.internal.NullableSerializer
import kotlinx.serialization.json.Json
internal val postsSerializer = ArrayListSerializer(SimplePost.serializer())
internal val paginationResultSerializer = PaginationResult.serializer(SimplePost.serializer())
internal val postsSerializer = ArrayListSerializer(SimpleRegisteredPost.serializer())
internal val paginationResultSerializer = PaginationResult.serializer(SimpleRegisteredPost.serializer())
internal val List<Post>.asSimplePostList
get() = map { post ->
@@ -25,8 +25,8 @@ internal val List<Post>.asSimplePostList
internal val Post.asSimplePost
get() = when (this) {
is SimplePost -> this
else -> SimplePost(id, content, meta)
is SimpleRegisteredPost -> this
else -> SimpleRegisteredPost(id, content, meta)
}
@InternalSerializationApi

View File

@@ -8,17 +8,10 @@ import com.insanusmokrassar.postssystem.core.post.*
import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationRequest
import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult
import io.ktor.application.*
import io.ktor.features.ContentNegotiation
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.request.receiveOrNull
import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.Route
import io.ktor.routing.post
import io.ktor.serialization.serialization
import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.json.Json
import org.joda.time.DateTime
@InternalSerializationApi
@@ -26,7 +19,7 @@ fun Route.includePostsCoreReadModules(readPostsAPI: ReadPostsAPI) {
post(getPostByIdAddress) {
call.receiveOrNull<PostId>() ?.also { id ->
val post = readPostsAPI.getPostById(id)
call.answer(SimplePost.serializer(), post ?.asSimplePost)
call.answer(SimpleRegisteredPost.serializer(), post ?.asSimplePost)
} ?: call.answerBadRequest("Id of post")
}
post(getPostsByContentIdAddress) {

View File

@@ -5,14 +5,10 @@ import com.insanusmokrassar.postssystem.core.clientserver.common.*
import com.insanusmokrassar.postssystem.core.clientserver.common.models.UpdatePostRequest
import com.insanusmokrassar.postssystem.core.post.*
import io.ktor.application.*
import io.ktor.features.ContentNegotiation
import io.ktor.http.ContentType
import io.ktor.http.cio.websocket.Frame
import io.ktor.request.receiveOrNull
import io.ktor.routing.Route
import io.ktor.routing.post
import io.ktor.serialization.serialization
import io.ktor.websocket.WebSockets
import io.ktor.websocket.webSocket
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
@@ -24,7 +20,7 @@ private inline fun Route.createWebsocket(path: String, flow: Flow<Post>) {
webSocket("/$path") {
flow.collect {
val simplePost = it.asSimplePost
outgoing.send(Frame.Text(Json.plain.stringify(SimplePost.serializer(), simplePost)))
outgoing.send(Frame.Text(Json.plain.stringify(SimpleRegisteredPost.serializer(), simplePost)))
}
}
}
@@ -41,7 +37,7 @@ fun Route.includePostsCoreWriteModules(
call.receiveOrNull<PostContents>() ?.also { contents ->
val post = writePostsAPI.createPost(contents)
call.answer(SimplePost.serializer(), post ?.asSimplePost)
call.answer(SimpleRegisteredPost.serializer(), post ?.asSimplePost)
} ?: call.answerBadRequest("Contents (List of Content)")
}