diff --git a/ServerPart/build.gradle b/ServerPart/build.gradle index 36af0bc4..a9173a3e 100644 --- a/ServerPart/build.gradle +++ b/ServerPart/build.gradle @@ -34,6 +34,7 @@ dependencies { api "io.ktor:ktor-server:$ktor_version" api "io.ktor:ktor-server-core:$ktor_version" api "io.ktor:ktor-websockets:$ktor_version" + api "io.ktor:ktor-serialization:$ktor_version" } compileKotlin { diff --git a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Installation.kt b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Installation.kt new file mode 100644 index 00000000..d7385168 --- /dev/null +++ b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Installation.kt @@ -0,0 +1,24 @@ +package com.insanusmokrassar.postssystem.core.server + +import io.ktor.application.* +import io.ktor.features.ContentNegotiation +import io.ktor.http.ContentType +import io.ktor.serialization.serialization +import io.ktor.websocket.WebSockets +import kotlinx.serialization.json.Json + +fun Application.installCorePosts() { + featureOrNull(ContentNegotiation) ?: install(ContentNegotiation) { + serialization( + contentType = ContentType.Application.Json, + json = Json.plain + ) + } +} + +fun Application.installCorePostsWrite() { + installCorePosts() + featureOrNull(WebSockets) ?: install(WebSockets) { + maxFrameSize = Long.MAX_VALUE + } +} diff --git a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/ReadModules.kt b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/ReadModules.kt index 3c8f2b09..326ac614 100644 --- a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/ReadModules.kt +++ b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/ReadModules.kt @@ -7,7 +7,8 @@ import com.insanusmokrassar.postssystem.core.content.ContentId 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.call +import io.ktor.application.* +import io.ktor.features.ContentNegotiation import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode import io.ktor.request.receiveOrNull @@ -15,17 +16,17 @@ 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 fun Route.includePostsCoreReadModules(readPostsAPI: ReadPostsAPI) { post(getPostByIdAddress) { call.receiveOrNull() ?.also { id -> val post = readPostsAPI.getPostById(id) - post ?.let { - val simplePost = post.asSimplePost - call.answer(SimplePost.serializer(), simplePost) - } ?: call.respond(HttpStatusCode.NotFound, "Not found") + call.answer(SimplePost.serializer(), post ?.asSimplePost) } ?: call.answerBadRequest("Id of post") } post(getPostsByContentIdAddress) { diff --git a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/WriteModules.kt b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/WriteModules.kt index d8ee7907..df93f7bf 100644 --- a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/WriteModules.kt +++ b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/WriteModules.kt @@ -4,11 +4,15 @@ import com.insanusmokrassar.postssystem.core.api.WritePostsAPI 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.call +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