From 6809a1cc4b2f3f0ec20e0752d0140abf8ecf66ea Mon Sep 17 00:00:00 2001 From: 000Sanya <000sanya.000sanya@gmail.com> Date: Thu, 13 Aug 2020 16:47:40 +1000 Subject: [PATCH 1/6] impl common --- publishing/ktor/common/build.gradle | 78 +++++++++++++++++++ publishing/ktor/common/publish.gradle | 0 .../publishing/ktor/PublishingKeysRoutes.kt | 7 ++ .../ktor/PublishingRegistrarRoutes.kt | 4 + .../ktor/PublishingTriggerRoutes.kt | 3 + .../publishing/ktor/Serializers.kt | 6 ++ settings.gradle | 1 + 7 files changed, 99 insertions(+) create mode 100644 publishing/ktor/common/build.gradle create mode 100644 publishing/ktor/common/publish.gradle create mode 100644 publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt create mode 100644 publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingRegistrarRoutes.kt create mode 100644 publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingTriggerRoutes.kt create mode 100644 publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/Serializers.kt diff --git a/publishing/ktor/common/build.gradle b/publishing/ktor/common/build.gradle new file mode 100644 index 00000000..5a8f7c1b --- /dev/null +++ b/publishing/ktor/common/build.gradle @@ -0,0 +1,78 @@ +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" + } +} + +plugins { + id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version" + id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version" +} + +project.version = "$core_version" +project.group = "com.insanusmokrassar" + +apply from: "publish.gradle" + +repositories { + mavenLocal() + jcenter() + mavenCentral() + maven { url "https://kotlin.bintray.com/kotlinx" } +} + +kotlin { + jvm() + js() + + sourceSets { + commonMain { + dependencies { + implementation kotlin('stdlib') + + if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") { + api "com.insanusmokrassar:postssystem.ktor.common:$core_version" + api "com.insanusmokrassar:postssystem.core.api:$core_version" + } else { + api projectByName("postssystem.ktor.common") + api projectByName("postssystem.core.api") + } + } + } + commonTest { + dependencies { + implementation kotlin('test-common') + implementation kotlin('test-annotations-common') + } + } + jvmMain { + dependencies { + implementation kotlin('stdlib-jdk8') + } + } + jvmTest { + dependencies { + implementation kotlin('test-junit') + } + } + jsMain { + dependencies { + implementation kotlin('stdlib-js') + } + } + jsTest { + dependencies { + implementation kotlin('test-js') + implementation kotlin('test-junit') + } + } + } +} diff --git a/publishing/ktor/common/publish.gradle b/publishing/ktor/common/publish.gradle new file mode 100644 index 00000000..e69de29b diff --git a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt new file mode 100644 index 00000000..0cb5cf0a --- /dev/null +++ b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt @@ -0,0 +1,7 @@ +package com.insanusmokrassar.postssystem.publishing.ktor + +const val getPostIdByTriggerControlKeyRoute = "getPostIdByTriggerControlKey" +const val getTriggerControlKeyByPostIdRoute = "getTriggerControlKeyByPostId" + +const val setPostTriggerControlKeyRoute = "setPostTriggerControlKey" +const val unsetPostTriggerControlKeyRoute = "unsetPostTriggerControlKey" \ No newline at end of file diff --git a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingRegistrarRoutes.kt b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingRegistrarRoutes.kt new file mode 100644 index 00000000..08e0a560 --- /dev/null +++ b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingRegistrarRoutes.kt @@ -0,0 +1,4 @@ +package com.insanusmokrassar.postssystem.publishing.ktor + +//const val getPostIdByTriggerControlKeyRoute = "getPostIdByTriggerControlKey" +const val registerTriggerForPostRoute = "registerTriggerForPost" diff --git a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingTriggerRoutes.kt b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingTriggerRoutes.kt new file mode 100644 index 00000000..1b010fae --- /dev/null +++ b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingTriggerRoutes.kt @@ -0,0 +1,3 @@ +package com.insanusmokrassar.postssystem.publishing.ktor + +const val triggerPostingRoute = "triggerPosting" \ No newline at end of file diff --git a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/Serializers.kt b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/Serializers.kt new file mode 100644 index 00000000..1c6b1f13 --- /dev/null +++ b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/Serializers.kt @@ -0,0 +1,6 @@ +package com.insanusmokrassar.postssystem.publishing.ktor + +import com.insanusmokrassar.postssystem.ktor.setIdsSerializer + +val postsIdSerializer = setIdsSerializer +val triggerControlKeysSerializer = setIdsSerializer diff --git a/settings.gradle b/settings.gradle index 388cb805..1535259d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -22,6 +22,7 @@ String[] includes = [ ':publishing:api', ':publishing:exposed', + ':publishing:ktor:common', ':markups:commons', ':markups:html' From a17eb21d693d50043f92914a1e6f35dc30b79b1f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 13 Aug 2020 13:18:12 +0600 Subject: [PATCH 2/6] update gradle scripts for publishing ktor commons --- publishing/ktor/common/build.gradle | 6 ++---- publishing/ktor/common/publish.gradle | 0 settings.gradle | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 publishing/ktor/common/publish.gradle diff --git a/publishing/ktor/common/build.gradle b/publishing/ktor/common/build.gradle index 5a8f7c1b..cbd356ff 100644 --- a/publishing/ktor/common/build.gradle +++ b/publishing/ktor/common/build.gradle @@ -20,8 +20,6 @@ plugins { project.version = "$core_version" project.group = "com.insanusmokrassar" -apply from: "publish.gradle" - repositories { mavenLocal() jcenter() @@ -40,10 +38,10 @@ kotlin { if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") { api "com.insanusmokrassar:postssystem.ktor.common:$core_version" - api "com.insanusmokrassar:postssystem.core.api:$core_version" + api "com.insanusmokrassar:postssystem.publishing.api:$core_version" } else { api projectByName("postssystem.ktor.common") - api projectByName("postssystem.core.api") + api projectByName("postssystem.publishing.api") } } } diff --git a/publishing/ktor/common/publish.gradle b/publishing/ktor/common/publish.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/settings.gradle b/settings.gradle index 1535259d..618dddcd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -22,7 +22,7 @@ String[] includes = [ ':publishing:api', ':publishing:exposed', - ':publishing:ktor:common', + ':publishing:ktor:common', ':markups:commons', ':markups:html' From 626edccc7d595a9b8ffe172ad07050e0e8ccc8d5 Mon Sep 17 00:00:00 2001 From: 000Sanya <000sanya.000sanya@gmail.com> Date: Sat, 15 Aug 2020 16:37:52 +1000 Subject: [PATCH 3/6] impl publishing klient and kerver --- publishing/ktor/client/build.gradle | 78 +++++++++++++++++++ publishing/ktor/client/publish.gradle | 0 .../client/PublishingKeysRepoKtorClient.kt | 10 +++ .../ReadPublishingKeysRepoKtorClient.kt | 26 +++++++ .../WritePublishingKeysRepoKtorClient.kt | 29 +++++++ .../ktor/SetPostTriggerControlKeyObject.kt | 11 +++ publishing/ktor/server/build.gradle | 41 ++++++++++ .../PublishingKeysRepoRoutingConfigurator.kt | 20 +++++ ...adPublishingKeysRepoRoutingConfigurator.kt | 45 +++++++++++ ...tePublishingKeysRepoRoutingConfigurator.kt | 39 ++++++++++ settings.gradle | 2 + 11 files changed, 301 insertions(+) create mode 100644 publishing/ktor/client/build.gradle create mode 100644 publishing/ktor/client/publish.gradle create mode 100644 publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt create mode 100644 publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt create mode 100644 publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/WritePublishingKeysRepoKtorClient.kt create mode 100644 publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/SetPostTriggerControlKeyObject.kt create mode 100644 publishing/ktor/server/build.gradle create mode 100644 publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt create mode 100644 publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/ReadPublishingKeysRepoRoutingConfigurator.kt create mode 100644 publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/WritePublishingKeysRepoRoutingConfigurator.kt diff --git a/publishing/ktor/client/build.gradle b/publishing/ktor/client/build.gradle new file mode 100644 index 00000000..4fef490f --- /dev/null +++ b/publishing/ktor/client/build.gradle @@ -0,0 +1,78 @@ +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" + } +} + +plugins { + id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version" + id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version" +} + +project.version = "$core_version" +project.group = "com.insanusmokrassar" + +apply from: "publish.gradle" + +repositories { + mavenLocal() + jcenter() + mavenCentral() + maven { url "https://kotlin.bintray.com/kotlinx" } +} + +kotlin { + jvm() + js() + + sourceSets { + commonMain { + dependencies { + implementation kotlin('stdlib') + + if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") { + api "com.insanusmokrassar:postssystem.core.ktor.common:$core_version" + api "com.insanusmokrassar:postssystem.ktor.client:$core_version" + } else { + api projectByName("postssystem.publishing.ktor.common") + api projectByName("postssystem.ktor.client") + } + } + } + commonTest { + dependencies { + implementation kotlin('test-common') + implementation kotlin('test-annotations-common') + } + } + jvmMain { + dependencies { + implementation kotlin('stdlib-jdk8') + } + } + jvmTest { + dependencies { + implementation kotlin('test-junit') + } + } + jsMain { + dependencies { + implementation kotlin('stdlib-js') + } + } + jsTest { + dependencies { + implementation kotlin('test-js') + implementation kotlin('test-junit') + } + } + } +} diff --git a/publishing/ktor/client/publish.gradle b/publishing/ktor/client/publish.gradle new file mode 100644 index 00000000..e69de29b diff --git a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt new file mode 100644 index 00000000..7855dbe3 --- /dev/null +++ b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt @@ -0,0 +1,10 @@ +package com.insanusmokrassar.postssystem.publishing.ktor.client + +import com.insanusmokrassar.postssystem.core.publishing.repos.PublishingKeysRepo +import com.insanusmokrassar.postssystem.core.publishing.repos.ReadPublishingKeysRepo +import com.insanusmokrassar.postssystem.core.publishing.repos.WritePublishingKeysRepo + +class PublishingKeysRepoKtorClient ( + readPublishingKeysClient: ReadPublishingKeysRepoKtorClient, + writePublishingKeysClient: WritePublishingKeysRepoKtorClient +) : PublishingKeysRepo, ReadPublishingKeysRepo by readPublishingKeysClient, WritePublishingKeysRepo by writePublishingKeysClient \ No newline at end of file diff --git a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt new file mode 100644 index 00000000..7c86744d --- /dev/null +++ b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt @@ -0,0 +1,26 @@ +package com.insanusmokrassar.postssystem.publishing.ktor.client + +import com.insanusmokrassar.postssystem.core.post.PostId +import com.insanusmokrassar.postssystem.core.publishing.TriggerControlKey +import com.insanusmokrassar.postssystem.core.publishing.repos.ReadPublishingKeysRepo +import com.insanusmokrassar.postssystem.ktor.client.uniget +import com.insanusmokrassar.postssystem.publishing.ktor.getPostIdByTriggerControlKeyRoute +import com.insanusmokrassar.postssystem.publishing.ktor.getTriggerControlKeyByPostIdRoute +import io.ktor.client.HttpClient +import kotlinx.serialization.builtins.nullable +import kotlinx.serialization.builtins.serializer + +class ReadPublishingKeysRepoKtorClient ( + private val baseUrl: String, + private val client: HttpClient = HttpClient() +) : ReadPublishingKeysRepo { + override suspend fun getPostIdByTriggerControlKey(key: TriggerControlKey): PostId? = client.uniget( + "$baseUrl/$getPostIdByTriggerControlKeyRoute", + PostId.serializer().nullable + ) + + override suspend fun getTriggerControlKeyByPostId(postId: PostId): TriggerControlKey? = client.uniget( + "$baseUrl/$getTriggerControlKeyByPostIdRoute", + TriggerControlKey.serializer().nullable + ) +} \ No newline at end of file diff --git a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/WritePublishingKeysRepoKtorClient.kt b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/WritePublishingKeysRepoKtorClient.kt new file mode 100644 index 00000000..16a9be59 --- /dev/null +++ b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/WritePublishingKeysRepoKtorClient.kt @@ -0,0 +1,29 @@ +package com.insanusmokrassar.postssystem.publishing.ktor.client + +import com.insanusmokrassar.postssystem.core.post.PostId +import com.insanusmokrassar.postssystem.core.publishing.TriggerControlKey +import com.insanusmokrassar.postssystem.core.publishing.repos.WritePublishingKeysRepo +import com.insanusmokrassar.postssystem.ktor.client.BodyPair +import com.insanusmokrassar.postssystem.ktor.client.unipost +import com.insanusmokrassar.postssystem.publishing.ktor.SetPostTriggerControlKeyObject +import com.insanusmokrassar.postssystem.publishing.ktor.setPostTriggerControlKeyRoute +import com.insanusmokrassar.postssystem.publishing.ktor.unsetPostTriggerControlKeyRoute +import io.ktor.client.HttpClient +import kotlinx.serialization.builtins.serializer + +class WritePublishingKeysRepoKtorClient ( + private val baseUrl: String, + private val client: HttpClient = HttpClient() +) : WritePublishingKeysRepo { + override suspend fun setPostTriggerControlKey(postId: PostId, key: TriggerControlKey): Boolean = client.unipost( + "$baseUrl/$setPostTriggerControlKeyRoute", + BodyPair(SetPostTriggerControlKeyObject.serializer(), SetPostTriggerControlKeyObject(postId, key)), + Boolean.serializer() + ) + + override suspend fun unsetPostTriggerControlKey(postId: PostId): Boolean = client.unipost( + "$baseUrl/$unsetPostTriggerControlKeyRoute", + BodyPair(PostId.serializer(), postId), + Boolean.serializer() + ) +} \ No newline at end of file diff --git a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/SetPostTriggerControlKeyObject.kt b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/SetPostTriggerControlKeyObject.kt new file mode 100644 index 00000000..edcb0c36 --- /dev/null +++ b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/SetPostTriggerControlKeyObject.kt @@ -0,0 +1,11 @@ +package com.insanusmokrassar.postssystem.publishing.ktor + +import com.insanusmokrassar.postssystem.core.post.PostId +import com.insanusmokrassar.postssystem.core.publishing.TriggerControlKey +import kotlinx.serialization.Serializable + +@Serializable +data class SetPostTriggerControlKeyObject ( + val postId: PostId, + val key: TriggerControlKey +) \ No newline at end of file diff --git a/publishing/ktor/server/build.gradle b/publishing/ktor/server/build.gradle new file mode 100644 index 00000000..91458d7c --- /dev/null +++ b/publishing/ktor/server/build.gradle @@ -0,0 +1,41 @@ +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" + } +} + +plugins { + id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version" +} + +project.version = "$core_version" +project.group = "com.insanusmokrassar" + +apply plugin: "java-library" +apply plugin: "kotlin" + +repositories { + mavenLocal() + jcenter() + mavenCentral() + maven { url "https://kotlin.bintray.com/kotlinx" } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + + api projectByName("postssystem.publishing.ktor.common") + api projectByName("postssystem.ktor.server") + + testImplementation "org.xerial:sqlite-jdbc:$test_sqlite_version" + testImplementation "org.jetbrains.kotlin:kotlin-test" + testImplementation "org.jetbrains.kotlin:kotlin-test-junit" +} diff --git a/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt new file mode 100644 index 00000000..56f584a8 --- /dev/null +++ b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt @@ -0,0 +1,20 @@ +package com.insanusmokrassar.postssystem.publishing.ktor.server + +import com.insanusmokrassar.postssystem.core.publishing.repos.PublishingKeysRepo +import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator +import io.ktor.routing.Route + +fun Route.configurePublishingKeysRepoRoutes ( + proxyTo: PublishingKeysRepo +) { + configureReadPublishingKeysRepoRoutes(proxyTo) + configureWritePublishingKeysRepoRoutes(proxyTo) +} + +class PublishingKeysRepoRoutingConfigurator ( + private val proxyTo: PublishingKeysRepo +) : ApplicationRoutingConfigurator.Element { + override fun Route.invoke() { + configurePublishingKeysRepoRoutes(proxyTo) + } +} \ No newline at end of file diff --git a/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/ReadPublishingKeysRepoRoutingConfigurator.kt b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/ReadPublishingKeysRepoRoutingConfigurator.kt new file mode 100644 index 00000000..5cc8e48b --- /dev/null +++ b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/ReadPublishingKeysRepoRoutingConfigurator.kt @@ -0,0 +1,45 @@ +package com.insanusmokrassar.postssystem.publishing.ktor.server + +import com.insanusmokrassar.postssystem.core.post.PostId +import com.insanusmokrassar.postssystem.core.publishing.TriggerControlKey +import com.insanusmokrassar.postssystem.core.publishing.repos.ReadPublishingKeysRepo +import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator +import com.insanusmokrassar.postssystem.ktor.server.getParameterOrSendError +import com.insanusmokrassar.postssystem.ktor.server.unianswer +import com.insanusmokrassar.postssystem.publishing.ktor.getPostIdByTriggerControlKeyRoute +import com.insanusmokrassar.postssystem.publishing.ktor.getTriggerControlKeyByPostIdRoute +import io.ktor.application.call +import io.ktor.routing.Route +import io.ktor.routing.get +import kotlinx.serialization.builtins.nullable +import kotlinx.serialization.builtins.serializer + +fun Route.configureReadPublishingKeysRepoRoutes ( + proxyTo: ReadPublishingKeysRepo +) { + get("$getPostIdByTriggerControlKeyRoute/{key}") { + val key: TriggerControlKey = call.getParameterOrSendError("key") ?: return@get + + call.unianswer( + PostId.serializer().nullable, + proxyTo.getPostIdByTriggerControlKey(key) + ) + } + + get("$getTriggerControlKeyByPostIdRoute/{postId}") { + val postId: PostId = call.getParameterOrSendError("postId") ?: return@get + + call.unianswer( + TriggerControlKey.serializer().nullable, + proxyTo.getTriggerControlKeyByPostId(postId) + ) + } +} + +class ReadPublishingKeysRepoRoutingConfigurator ( + private val proxyTo: ReadPublishingKeysRepo +) : ApplicationRoutingConfigurator.Element { + override fun Route.invoke() { + configureReadPublishingKeysRepoRoutes(proxyTo) + } +} \ No newline at end of file diff --git a/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/WritePublishingKeysRepoRoutingConfigurator.kt b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/WritePublishingKeysRepoRoutingConfigurator.kt new file mode 100644 index 00000000..aedca55c --- /dev/null +++ b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/WritePublishingKeysRepoRoutingConfigurator.kt @@ -0,0 +1,39 @@ +package com.insanusmokrassar.postssystem.publishing.ktor.server + +import com.insanusmokrassar.postssystem.core.post.PostId +import com.insanusmokrassar.postssystem.core.publishing.repos.WritePublishingKeysRepo +import com.insanusmokrassar.postssystem.ktor.server.unianswer +import com.insanusmokrassar.postssystem.ktor.server.uniload +import com.insanusmokrassar.postssystem.publishing.ktor.SetPostTriggerControlKeyObject +import com.insanusmokrassar.postssystem.publishing.ktor.setPostTriggerControlKeyRoute +import com.insanusmokrassar.postssystem.publishing.ktor.unsetPostTriggerControlKeyRoute +import io.ktor.application.call +import io.ktor.routing.Route +import io.ktor.routing.post +import kotlinx.serialization.builtins.serializer + +fun Route.configureWritePublishingKeysRepoRoutes ( + proxyTo: WritePublishingKeysRepo +) { + post(setPostTriggerControlKeyRoute) { + val obj = call.uniload(SetPostTriggerControlKeyObject.serializer()) + + call.unianswer( + Boolean.serializer(), + proxyTo.setPostTriggerControlKey(obj.postId, obj.key) + ) + } + + post(unsetPostTriggerControlKeyRoute) { + val postId = call.uniload(PostId.serializer()) + + call.unianswer( + Boolean.serializer(), + proxyTo.unsetPostTriggerControlKey(postId) + ) + } +} + +class WritePublishingKeysRepoRoutingConfigurator ( + private val proxyTo: WritePublishingKeysRepo +) \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 618dddcd..babfd742 100644 --- a/settings.gradle +++ b/settings.gradle @@ -23,6 +23,8 @@ String[] includes = [ ':publishing:api', ':publishing:exposed', ':publishing:ktor:common', + ':publishing:ktor:client', + ':publishing:ktor:server', ':markups:commons', ':markups:html' From 8a4934a65a2f9b785aa1e00417c5a34ea0e3dbb6 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 15 Aug 2020 12:46:59 +0600 Subject: [PATCH 4/6] upfixes --- .../ktor/client/ReadPublishingKeysRepoKtorClient.kt | 4 ++-- .../postssystem/publishing/ktor/PublishingKeysRoutes.kt | 2 ++ .../ktor/server/PublishingKeysRepoRoutingConfigurator.kt | 8 ++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt index 7c86744d..216b8428 100644 --- a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt +++ b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/ReadPublishingKeysRepoKtorClient.kt @@ -15,12 +15,12 @@ class ReadPublishingKeysRepoKtorClient ( private val client: HttpClient = HttpClient() ) : ReadPublishingKeysRepo { override suspend fun getPostIdByTriggerControlKey(key: TriggerControlKey): PostId? = client.uniget( - "$baseUrl/$getPostIdByTriggerControlKeyRoute", + "$baseUrl/$getPostIdByTriggerControlKeyRoute/$key", PostId.serializer().nullable ) override suspend fun getTriggerControlKeyByPostId(postId: PostId): TriggerControlKey? = client.uniget( - "$baseUrl/$getTriggerControlKeyByPostIdRoute", + "$baseUrl/$getTriggerControlKeyByPostIdRoute/$postId", TriggerControlKey.serializer().nullable ) } \ No newline at end of file diff --git a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt index 0cb5cf0a..91c89a2b 100644 --- a/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt +++ b/publishing/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/PublishingKeysRoutes.kt @@ -1,5 +1,7 @@ package com.insanusmokrassar.postssystem.publishing.ktor +const val publishingKeysRootRoute = "publishingKeys" + const val getPostIdByTriggerControlKeyRoute = "getPostIdByTriggerControlKey" const val getTriggerControlKeyByPostIdRoute = "getTriggerControlKeyByPostId" diff --git a/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt index 56f584a8..8f5918a7 100644 --- a/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt +++ b/publishing/ktor/server/src/main/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/server/PublishingKeysRepoRoutingConfigurator.kt @@ -2,13 +2,17 @@ package com.insanusmokrassar.postssystem.publishing.ktor.server import com.insanusmokrassar.postssystem.core.publishing.repos.PublishingKeysRepo import com.insanusmokrassar.postssystem.ktor.server.configurators.ApplicationRoutingConfigurator +import com.insanusmokrassar.postssystem.publishing.ktor.publishingKeysRootRoute import io.ktor.routing.Route +import io.ktor.routing.route fun Route.configurePublishingKeysRepoRoutes ( proxyTo: PublishingKeysRepo ) { - configureReadPublishingKeysRepoRoutes(proxyTo) - configureWritePublishingKeysRepoRoutes(proxyTo) + route(publishingKeysRootRoute) { + configureReadPublishingKeysRepoRoutes(proxyTo) + configureWritePublishingKeysRepoRoutes(proxyTo) + } } class PublishingKeysRepoRoutingConfigurator ( From b4798bc06271cf95f2e5421fa54fd399d6eece95 Mon Sep 17 00:00:00 2001 From: 000Sanya <000sanya.000sanya@gmail.com> Date: Sun, 16 Aug 2020 14:30:13 +1000 Subject: [PATCH 5/6] fixed constructor of PublishingKeysRepoKtorClient --- .../client/PublishingKeysRepoKtorClient.kt | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt index 7855dbe3..d2b32baa 100644 --- a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt +++ b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt @@ -3,8 +3,26 @@ package com.insanusmokrassar.postssystem.publishing.ktor.client import com.insanusmokrassar.postssystem.core.publishing.repos.PublishingKeysRepo import com.insanusmokrassar.postssystem.core.publishing.repos.ReadPublishingKeysRepo import com.insanusmokrassar.postssystem.core.publishing.repos.WritePublishingKeysRepo +import io.ktor.client.HttpClient +import io.ktor.client.features.websocket.WebSockets -class PublishingKeysRepoKtorClient ( +class PublishingKeysRepoKtorClient private constructor ( readPublishingKeysClient: ReadPublishingKeysRepoKtorClient, writePublishingKeysClient: WritePublishingKeysRepoKtorClient -) : PublishingKeysRepo, ReadPublishingKeysRepo by readPublishingKeysClient, WritePublishingKeysRepo by writePublishingKeysClient \ No newline at end of file +) : PublishingKeysRepo, ReadPublishingKeysRepo by readPublishingKeysClient, WritePublishingKeysRepo by writePublishingKeysClient { + constructor( + baseUrl: String, + client: HttpClient = HttpClient { + install(WebSockets) + } + ) : this ( + ReadPublishingKeysRepoKtorClient ( + baseUrl, + client + ), + WritePublishingKeysRepoKtorClient( + baseUrl, + client + ) + ) +} \ No newline at end of file From 5d900e903276fceab249bb223e067ca2480e44f4 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 17 Aug 2020 22:06:33 +0600 Subject: [PATCH 6/6] fix for PublishingKeysRepoKtorClient --- .../publishing/ktor/client/PublishingKeysRepoKtorClient.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt index d2b32baa..7739efc0 100644 --- a/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt +++ b/publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/PublishingKeysRepoKtorClient.kt @@ -3,6 +3,7 @@ package com.insanusmokrassar.postssystem.publishing.ktor.client import com.insanusmokrassar.postssystem.core.publishing.repos.PublishingKeysRepo import com.insanusmokrassar.postssystem.core.publishing.repos.ReadPublishingKeysRepo import com.insanusmokrassar.postssystem.core.publishing.repos.WritePublishingKeysRepo +import com.insanusmokrassar.postssystem.publishing.ktor.publishingKeysRootRoute import io.ktor.client.HttpClient import io.ktor.client.features.websocket.WebSockets @@ -17,11 +18,11 @@ class PublishingKeysRepoKtorClient private constructor ( } ) : this ( ReadPublishingKeysRepoKtorClient ( - baseUrl, + "$baseUrl/$publishingKeysRootRoute", client ), WritePublishingKeysRepoKtorClient( - baseUrl, + "$baseUrl/$publishingKeysRootRoute", client ) )