From 2a55bea0ea93868b638e6b65fddfe8a278db3b8c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 1 Nov 2019 09:54:26 +0600 Subject: [PATCH] remove all redundant boilerplate --- ClientPart/build.gradle | 44 --------------- ClientPart/gradle.properties | 1 - ClientPart/settings.gradle | 1 - .../postssystem/core/client/EventFlow.kt | 40 -------------- .../postssystem/core/client/Installation.kt | 11 ---- .../core/client/ReadableHttpPostsAPI.kt | 49 ----------------- .../core/client/WritableHttpPostsAPI.kt | 46 ---------------- ClientServerCommon/build.gradle | 38 ------------- ClientServerCommon/settings.gradle | 1 - .../core/clientserver/common/Paths.kt | 23 -------- .../core/clientserver/common/ReadModels.kt | 11 ---- .../common/models/DateTimeRequest.kt | 9 ---- .../common/models/UpdatePostRequest.kt | 11 ---- .../postssystem/core/api/PostsAPI.kt | 3 +- .../postssystem/core/api/WritePostsAPI.kt | 2 +- .../postssystem/core/post/Post.kt | 2 - ...ginationRequest.kt => SimplePagination.kt} | 2 +- ServerPart/build.gradle | 44 --------------- ServerPart/gradle.properties | 1 - ServerPart/settings.gradle | 1 - .../postssystem/core/server/Commons.kt | 42 --------------- .../postssystem/core/server/Installation.kt | 24 --------- .../postssystem/core/server/ReadModules.kt | 52 ------------------ .../postssystem/core/server/WriteModules.kt | 54 ------------------- 24 files changed, 3 insertions(+), 509 deletions(-) delete mode 100644 ClientPart/build.gradle delete mode 100644 ClientPart/gradle.properties delete mode 100644 ClientPart/settings.gradle delete mode 100644 ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/EventFlow.kt delete mode 100644 ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/Installation.kt delete mode 100644 ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/ReadableHttpPostsAPI.kt delete mode 100644 ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/WritableHttpPostsAPI.kt delete mode 100644 ClientServerCommon/build.gradle delete mode 100644 ClientServerCommon/settings.gradle delete mode 100644 ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/Paths.kt delete mode 100644 ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/ReadModels.kt delete mode 100644 ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/DateTimeRequest.kt delete mode 100644 ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/UpdatePostRequest.kt rename Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/{PaginationRequest.kt => SimplePagination.kt} (86%) delete mode 100644 ServerPart/build.gradle delete mode 100644 ServerPart/gradle.properties delete mode 100644 ServerPart/settings.gradle delete mode 100644 ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Commons.kt delete mode 100644 ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Installation.kt delete mode 100644 ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/ReadModules.kt delete mode 100644 ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/WriteModules.kt diff --git a/ClientPart/build.gradle b/ClientPart/build.gradle deleted file mode 100644 index 145f8c84..00000000 --- a/ClientPart/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -project.version = "$project_public_version" -project.group = "$project_public_group" - -buildscript { - repositories { - mavenLocal() - jcenter() - mavenCentral() - } - - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version" - } -} - -apply plugin: 'java-library' -apply plugin: 'kotlin' -apply plugin: 'kotlinx-serialization' - -repositories { - mavenLocal() - jcenter() - mavenCentral() - maven { url "https://kotlin.bintray.com/kotlinx" } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - api project(":Core") - api project(":ClientServerCommon") - - api "io.ktor:ktor-client:$ktor_version" - api "io.ktor:ktor-client-websockets:$ktor_version" - api "io.ktor:ktor-client-json-jvm:$ktor_version" - api "io.ktor:ktor-client-serialization-jvm:$ktor_version" -} - -compileKotlin { - kotlinOptions { - freeCompilerArgs = [ disableImplicitReflectionSerializerAnnotation ] - } -} diff --git a/ClientPart/gradle.properties b/ClientPart/gradle.properties deleted file mode 100644 index 35649e7e..00000000 --- a/ClientPart/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -ktor_version=1.2.4 diff --git a/ClientPart/settings.gradle b/ClientPart/settings.gradle deleted file mode 100644 index 11dc58a5..00000000 --- a/ClientPart/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'postssystem.core.client' diff --git a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/EventFlow.kt b/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/EventFlow.kt deleted file mode 100644 index 55d2a593..00000000 --- a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/EventFlow.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.insanusmokrassar.postssystem.core.client - -import io.ktor.client.HttpClient -import io.ktor.client.features.websocket.ws -import io.ktor.http.HttpMethod -import io.ktor.http.cio.websocket.Frame -import io.ktor.http.cio.websocket.readText -import kotlinx.coroutines.InternalCoroutinesApi -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.FlowCollector - -class EventFlow( - private val client: HttpClient, - private val host: String, - private val port: Int, - private val path: String, - private val dataConverter: suspend (String) -> T -) : Flow { - @InternalCoroutinesApi - override suspend fun collect(collector: FlowCollector) { - client.ws( - method = HttpMethod.Get, - host = host, - port = port, - path = path - ) { - var frame = incoming.receiveOrClosed() - while (!frame.isClosed) { - val frameVal = frame.value - when (frameVal) { - is Frame.Text -> { - collector.emit( - dataConverter(frameVal.readText()) - ) - } - } - } - } - } -} diff --git a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/Installation.kt b/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/Installation.kt deleted file mode 100644 index f8316862..00000000 --- a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/Installation.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.insanusmokrassar.postssystem.core.client - -import io.ktor.client.HttpClientConfig -import io.ktor.client.features.json.JsonFeature -import io.ktor.client.features.json.serializer.KotlinxSerializer - -fun HttpClientConfig<*>.installPostsCore() { - install(JsonFeature) { - serializer = KotlinxSerializer() - } -} diff --git a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/ReadableHttpPostsAPI.kt b/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/ReadableHttpPostsAPI.kt deleted file mode 100644 index c23a1eca..00000000 --- a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/ReadableHttpPostsAPI.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.insanusmokrassar.postssystem.core.client - -import com.insanusmokrassar.postssystem.core.api.ReadPostsAPI -import com.insanusmokrassar.postssystem.core.clientserver.common.models.DateTimeRequest -import com.insanusmokrassar.postssystem.core.clientserver.common.* -import com.insanusmokrassar.postssystem.core.content.ContentId -import com.insanusmokrassar.postssystem.core.post.* -import com.insanusmokrassar.postssystem.core.utils.pagination.Pagination -import com.insanusmokrassar.postssystem.core.utils.pagination.PaginationResult -import io.ktor.client.HttpClient -import io.ktor.client.request.post -import org.joda.time.DateTime - -class ReadableHttpPostsAPI( - private val client: HttpClient = HttpClient(), - baseAddress: String -) : ReadPostsAPI { - private val postByIdAddress = "$baseAddress/$getPostByIdAddress" - private val postsByContentIdAddress = "$baseAddress/$getPostsByContentIdAddress" - private val postsByDatesAddress = "$baseAddress/$getPostsByDatesAddress" - private val postsByPaginationAddress = "$baseAddress/$getPostsByPaginationAddress" - - override suspend fun getPostById(id: PostId): RegisteredPost? { - return client.post(postByIdAddress) { - body = id - } - } - - override suspend fun getPostsByContent(id: ContentId): List { - return client.post>(postsByContentIdAddress) { - body = id - } - } - - override suspend fun getPostsByDates(from: DateTime?, to: DateTime?): List { - return client.post>(postsByDatesAddress) { - body = DateTimeRequest( - from ?.millis, - to ?.millis - ) - } - } - - override suspend fun getPostsByPagination(pagination: Pagination): PaginationResult { - return client.post>(postsByPaginationAddress) { - body = pagination - } - } -} \ No newline at end of file diff --git a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/WritableHttpPostsAPI.kt b/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/WritableHttpPostsAPI.kt deleted file mode 100644 index 15a15fd3..00000000 --- a/ClientPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/client/WritableHttpPostsAPI.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.insanusmokrassar.postssystem.core.client - -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.client.HttpClient -import io.ktor.client.request.post -import kotlinx.coroutines.flow.Flow -import kotlinx.serialization.json.Json - -class WritableHttpPostsAPI( - private val hostUrl: String, - private val port: Int, - private val client: HttpClient -) : WritePostsAPI { - private inline fun postEventFlow(url: String) = EventFlow( - client, - hostUrl, - port, - "/$url" - ) { - Json.plain.parse(SimpleRegisteredPost.serializer(), it) - } - - override val postCreatedFlow: Flow = postEventFlow(eventPostsCreatedAddress) - override val postDeletedFlow: Flow = postEventFlow(eventPostsDeletedAddress) - override val postUpdatedFlow: Flow = postEventFlow(eventPostsUpdatedAddress) - - override suspend fun createPost(post: Post): RegisteredPost? = client.post( - createPostAddress - ) { - body = post.content - } - - override suspend fun deletePost(id: PostId): Boolean = client.post(deletePostAddress) { - body = id - } - - override suspend fun updatePostContent( - postId: PostId, - post: Post - ): Boolean = client.post(createPostAddress) { - body = UpdatePostRequest(postId, post.content) - } -} \ No newline at end of file diff --git a/ClientServerCommon/build.gradle b/ClientServerCommon/build.gradle deleted file mode 100644 index a2fd62b1..00000000 --- a/ClientServerCommon/build.gradle +++ /dev/null @@ -1,38 +0,0 @@ -project.version = "$project_public_version" -project.group = "$project_public_group" - -buildscript { - repositories { - mavenLocal() - jcenter() - mavenCentral() - } - - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version" - } -} - -apply plugin: 'java-library' -apply plugin: 'kotlin' -apply plugin: 'kotlinx-serialization' - -repositories { - mavenLocal() - jcenter() - mavenCentral() - maven { url "https://kotlin.bintray.com/kotlinx" } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - api project(":Core") -} - -compileKotlin { - kotlinOptions { - freeCompilerArgs = [ disableImplicitReflectionSerializerAnnotation ] - } -} diff --git a/ClientServerCommon/settings.gradle b/ClientServerCommon/settings.gradle deleted file mode 100644 index 74766e34..00000000 --- a/ClientServerCommon/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'postssystem.core.clientserver.common' diff --git a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/Paths.kt b/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/Paths.kt deleted file mode 100644 index ab49b8f9..00000000 --- a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/Paths.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.insanusmokrassar.postssystem.core.clientserver.common - -const val getPostByIdAddress = "core/posts/get/id" -const val getPostsByContentIdAddress = "core/posts/get/content_id" -const val getPostsByDatesAddress = "core/posts/get/dates" -const val getPostsByPaginationAddress = "core/posts/get/pagination" - -const val eventPostsCreatedAddress = "core/posts/event/created" -const val eventPostsUpdatedAddress = "core/posts/event/updated" -const val eventPostsDeletedAddress = "core/posts/event/deleted" - -const val createPostAddress = "core/posts/create" -const val updatePostAddress = "core/posts/update" -const val deletePostAddress = "core/posts/delete" - -//class ReadPaths( -// val baseAddress: String -//) { -// val postByIdAddress = "$baseAddress/$getPostByIdAddress" -// val postsByContentIdAddress = "$baseAddress/$getPostsByContentIdAddress" -// val postsByDatesAddress = "$baseAddress/$getPostsByDatesAddress" -// val postsByPaginationAddress = "$baseAddress/$getPostsByPaginationAddress" -//} diff --git a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/ReadModels.kt b/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/ReadModels.kt deleted file mode 100644 index 41327865..00000000 --- a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/ReadModels.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.insanusmokrassar.postssystem.core.clientserver.common - -import com.insanusmokrassar.postssystem.core.post.PostId -import kotlinx.serialization.Serializable - -sealed class ReadModel - -@Serializable -class ReadPostsById( - val postId: PostId -) diff --git a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/DateTimeRequest.kt b/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/DateTimeRequest.kt deleted file mode 100644 index 2adfb916..00000000 --- a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/DateTimeRequest.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.insanusmokrassar.postssystem.core.clientserver.common.models - -import kotlinx.serialization.Serializable - -@Serializable -data class DateTimeRequest ( - val from: Long?, - val to: Long? -) diff --git a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/UpdatePostRequest.kt b/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/UpdatePostRequest.kt deleted file mode 100644 index 8e062b5e..00000000 --- a/ClientServerCommon/src/main/kotlin/com/insanusmokrassar/postssystem/core/clientserver/common/models/UpdatePostRequest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.insanusmokrassar.postssystem.core.clientserver.common.models - -import com.insanusmokrassar.postssystem.core.post.PostContents -import com.insanusmokrassar.postssystem.core.post.PostId -import kotlinx.serialization.Serializable - -@Serializable -data class UpdatePostRequest( - val id: PostId, - val content: PostContents -) diff --git a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/PostsAPI.kt b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/PostsAPI.kt index bd5354b9..9021fe6a 100644 --- a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/PostsAPI.kt +++ b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/PostsAPI.kt @@ -1,4 +1,3 @@ package com.insanusmokrassar.postssystem.core.api -interface PostsAPI : ReadPostsAPI, - WritePostsAPI +interface PostsAPI : ReadPostsAPI, WritePostsAPI diff --git a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/WritePostsAPI.kt b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/WritePostsAPI.kt index 881120b2..c4980197 100644 --- a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/WritePostsAPI.kt +++ b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/api/WritePostsAPI.kt @@ -13,4 +13,4 @@ interface WritePostsAPI { suspend fun deletePost(id: PostId): Boolean suspend fun updatePostContent(postId: PostId, post: Post): Boolean -} \ No newline at end of file +} diff --git a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/post/Post.kt b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/post/Post.kt index 2e4b6e29..7292b6a2 100644 --- a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/post/Post.kt +++ b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/post/Post.kt @@ -22,12 +22,10 @@ interface RegisteredPost : Post { val modificationDate: DateTime } -@Serializable data class SimplePost( override val content: PostContents ) : Post -@Serializable data class SimpleRegisteredPost( override val id: PostId, override val content: RegisteredPostContents, diff --git a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationRequest.kt b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/SimplePagination.kt similarity index 86% rename from Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationRequest.kt rename to Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/SimplePagination.kt index 53a6124e..6e143a80 100644 --- a/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/PaginationRequest.kt +++ b/Core/src/main/kotlin/com/insanusmokrassar/postssystem/core/utils/pagination/SimplePagination.kt @@ -3,7 +3,7 @@ package com.insanusmokrassar.postssystem.core.utils.pagination import kotlinx.serialization.Serializable @Serializable -data class PaginationRequest( +data class SimplePagination( override val page: Int, override val size: Int ) : Pagination diff --git a/ServerPart/build.gradle b/ServerPart/build.gradle deleted file mode 100644 index c3257a46..00000000 --- a/ServerPart/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -project.version = "$project_public_version" -project.group = "$project_public_group" - -buildscript { - repositories { - mavenLocal() - jcenter() - mavenCentral() - } - - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version" - } -} - -apply plugin: 'java-library' -apply plugin: 'kotlin' -apply plugin: 'kotlinx-serialization' - -repositories { - mavenLocal() - jcenter() - mavenCentral() - maven { url "https://kotlin.bintray.com/kotlinx" } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - api project(":Core") - api project(":ClientServerCommon") - - 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 { - kotlinOptions { - freeCompilerArgs = [ disableImplicitReflectionSerializerAnnotation ] - } -} diff --git a/ServerPart/gradle.properties b/ServerPart/gradle.properties deleted file mode 100644 index 35649e7e..00000000 --- a/ServerPart/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -ktor_version=1.2.4 diff --git a/ServerPart/settings.gradle b/ServerPart/settings.gradle deleted file mode 100644 index c60c2819..00000000 --- a/ServerPart/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'postssystem.core.server' diff --git a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Commons.kt b/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Commons.kt deleted file mode 100644 index ec03f14d..00000000 --- a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Commons.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.insanusmokrassar.postssystem.core.server - -import com.insanusmokrassar.postssystem.core.post.Post -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 -import io.ktor.http.HttpStatusCode -import io.ktor.response.respond -import io.ktor.response.respondText -import kotlinx.serialization.InternalSerializationApi -import kotlinx.serialization.KSerializer -import kotlinx.serialization.internal.ArrayListSerializer -import kotlinx.serialization.internal.NullableSerializer -import kotlinx.serialization.json.Json - - -internal val postsSerializer = ArrayListSerializer(SimpleRegisteredPost.serializer()) -internal val paginationResultSerializer = PaginationResult.serializer(SimpleRegisteredPost.serializer()) - -internal val List.asSimplePostList - get() = map { post -> - post.asSimplePost - } - -internal val Post.asSimplePost - get() = when (this) { - is SimpleRegisteredPost -> this - else -> SimpleRegisteredPost(id, content, meta) - } - -@InternalSerializationApi -internal suspend fun ApplicationCall.answer( - serializer: KSerializer, - answerObject: T? -) = respondText(ContentType.Application.Json) { - Json.plain.stringify(NullableSerializer(serializer), answerObject) -} - -internal suspend fun ApplicationCall.answerBadRequest( - mustBeProvided: String -) = respond(HttpStatusCode.BadRequest, "$mustBeProvided must be provided as body of request") 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 deleted file mode 100644 index d7385168..00000000 --- a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/Installation.kt +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index 5d1498cd..00000000 --- a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/ReadModules.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.insanusmokrassar.postssystem.core.server - -import com.insanusmokrassar.postssystem.core.api.ReadPostsAPI -import com.insanusmokrassar.postssystem.core.clientserver.common.* -import com.insanusmokrassar.postssystem.core.clientserver.common.models.DateTimeRequest -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.* -import io.ktor.request.receiveOrNull -import io.ktor.routing.Route -import io.ktor.routing.post -import kotlinx.serialization.InternalSerializationApi -import org.joda.time.DateTime - -@InternalSerializationApi -fun Route.includePostsCoreReadModules(readPostsAPI: ReadPostsAPI) { - post(getPostByIdAddress) { - call.receiveOrNull() ?.also { id -> - val post = readPostsAPI.getPostById(id) - call.answer(SimpleRegisteredPost.serializer(), post ?.asSimplePost) - } ?: call.answerBadRequest("Id of post") - } - post(getPostsByContentIdAddress) { - call.receiveOrNull() ?.also { id -> - val posts = readPostsAPI.getPostsByContent(id) - val simplePosts = posts.asSimplePostList - call.answer(postsSerializer, simplePosts) - } ?: call.answerBadRequest("Id of content") - } - post(getPostsByDatesAddress) { - call.receiveOrNull() ?.also { (from, to) -> - val posts = readPostsAPI.getPostsByDates(from ?.let { DateTime(it) }, to ?.let { DateTime(it) }) - val simplePosts = posts.asSimplePostList - call.answer(postsSerializer, simplePosts) - } ?: call.answerBadRequest("Object \"DateTimeRequest\"") - } - post(getPostsByPaginationAddress) { - call.receiveOrNull() ?.also { pagination -> - val paginationResult = readPostsAPI.getPostsByPagination(pagination).let { - val simplePosts = it.results.asSimplePostList - PaginationResult( - it.page, - it.pagesNumber, - simplePosts - ) - } - call.answer(paginationResultSerializer, paginationResult) - } ?: call.answerBadRequest("Object \"PaginationRequest\"") - } -} 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 deleted file mode 100644 index 975e11de..00000000 --- a/ServerPart/src/main/kotlin/com/insanusmokrassar/postssystem/core/server/WriteModules.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.insanusmokrassar.postssystem.core.server - -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.* -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.websocket.webSocket -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect -import kotlinx.serialization.InternalSerializationApi -import kotlinx.serialization.internal.BooleanSerializer -import kotlinx.serialization.json.Json - -private inline fun Route.createWebsocket(path: String, flow: Flow) { - webSocket("/$path") { - flow.collect { - val simplePost = it.asSimplePost - outgoing.send(Frame.Text(Json.plain.stringify(SimpleRegisteredPost.serializer(), simplePost))) - } - } -} - -@InternalSerializationApi -fun Route.includePostsCoreWriteModules( - writePostsAPI: WritePostsAPI -) { - createWebsocket(eventPostsCreatedAddress, writePostsAPI.postCreatedFlow) - createWebsocket(eventPostsDeletedAddress, writePostsAPI.postDeletedFlow) - createWebsocket(eventPostsUpdatedAddress, writePostsAPI.postUpdatedFlow) - - post(createPostAddress) { - call.receiveOrNull() ?.also { contents -> - val post = writePostsAPI.createPost(contents) - - call.answer(SimpleRegisteredPost.serializer(), post ?.asSimplePost) - } ?: call.answerBadRequest("Contents (List of Content)") - } - - post(deletePostAddress) { - call.receiveOrNull() ?.also { postId -> - call.answer(BooleanSerializer, writePostsAPI.deletePost(postId)) - } ?: call.answerBadRequest("Post Id (String)") - } - post(deletePostAddress) { - call.receiveOrNull() ?.also { (postId, contents) -> - call.answer(BooleanSerializer, writePostsAPI.updatePostContent(postId, contents)) - } ?: call.answerBadRequest("Post Id (String)") - } -} \ No newline at end of file