From 14a40bfef022cecb99bbf64ffe67b0d425d7bd32 Mon Sep 17 00:00:00 2001
From: InsanusMokrassar <ovsyannikov.alexey95@gmail.com>
Date: Mon, 10 Aug 2020 19:09:46 +0600
Subject: [PATCH] add projectByName function

---
 build.gradle                                  | 13 +++-
 core/api/build.gradle                         |  2 +-
 core/exposed/build.gradle                     |  4 +-
 core/ktor/client/build.gradle                 |  4 +-
 .../content/ReadContentRepoKtorClient.kt      | 63 ++++++++++---------
 .../content/WriteContentRepoKtorClient.kt     | 15 +++++
 core/ktor/common/build.gradle                 |  4 +-
 .../postssystem/core/ktor/Routes.kt           |  3 +
 .../postssystem/core/ktor/Serializers.kt      |  8 +++
 exposed/commons/build.gradle                  |  2 +-
 ktor/client/build.gradle                      |  2 +-
 .../ktor/CollectionsSerializers.kt            |  6 ++
 markups/{ => commons}/build.gradle            |  2 +-
 markups/{ => commons}/maven.publish.gradle    |  0
 markups/{ => commons}/publish.gradle          |  0
 markups/{ => commons}/publish_config.kpsb     |  0
 .../markups/core/AbstractMarkupPlugin.kt      |  0
 .../postssystem/markups/core/MarkupPlugin.kt  |  0
 .../postssystem/markups/core/MarkupsSystem.kt |  0
 .../markups/core/utils/ListBuilder.kt         |  0
 markups/html/build.gradle                     |  6 +-
 publishing/api/build.gradle                   |  2 +-
 publishing/exposed/build.gradle               |  4 +-
 settings.gradle                               |  8 +--
 utils/repos/exposed/build.gradle              |  4 +-
 25 files changed, 95 insertions(+), 57 deletions(-)
 create mode 100644 core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/WriteContentRepoKtorClient.kt
 create mode 100644 core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Serializers.kt
 create mode 100644 ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/ktor/CollectionsSerializers.kt
 rename markups/{ => commons}/build.gradle (97%)
 rename markups/{ => commons}/maven.publish.gradle (100%)
 rename markups/{ => commons}/publish.gradle (100%)
 rename markups/{ => commons}/publish_config.kpsb (100%)
 rename markups/{ => commons}/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt (100%)
 rename markups/{ => commons}/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt (100%)
 rename markups/{ => commons}/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt (100%)
 rename markups/{ => commons}/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt (100%)

diff --git a/build.gradle b/build.gradle
index c58bcd30..4f7abf8d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -13,6 +13,15 @@ repositories {
     maven { url "https://kotlin.bintray.com/kotlinx" }
 }
 
-subprojects.each {
-    println(it)
+allprojects {
+    ext {
+        projectByName = { name ->
+            for (subproject in rootProject.subprojects) {
+                if (subproject.name == name) {
+                    return subproject
+                }
+            }
+            return null
+        }
+    }
 }
diff --git a/core/api/build.gradle b/core/api/build.gradle
index b58b90b1..4371f0c4 100644
--- a/core/api/build.gradle
+++ b/core/api/build.gradle
@@ -41,7 +41,7 @@ kotlin {
                 if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
                     api "com.insanusmokrassar:postssystem.utils.repos:$core_version"
                 } else {
-                    api project(":utils:repos:postssystem.utils.repos.common")
+                    api projectByName("postssystem.utils.repos.common")
                 }
             }
         }
diff --git a/core/exposed/build.gradle b/core/exposed/build.gradle
index 2343c1ef..97c5f2aa 100644
--- a/core/exposed/build.gradle
+++ b/core/exposed/build.gradle
@@ -37,8 +37,8 @@ dependencies {
         api "com.insanusmokrassar:postssystem.core.api:$core_version"
         api "com.insanusmokrassar:postssystem.exposed.commons:$core_version"
     } else {
-        api project(":core:postssystem.core.api")
-        api project(":exposed:postssystem.exposed.commons")
+        api projectByName("postssystem.core.api")
+        api projectByName("postssystem.exposed.commons")
     }
 
     testImplementation "org.xerial:sqlite-jdbc:$test_sqlite_version"
diff --git a/core/ktor/client/build.gradle b/core/ktor/client/build.gradle
index e766987d..6f6a4456 100644
--- a/core/ktor/client/build.gradle
+++ b/core/ktor/client/build.gradle
@@ -42,8 +42,8 @@ kotlin {
                     api "com.insanusmokrassar:postssystem.core.ktor.common:$core_version"
                     api "com.insanusmokrassar:postssystem.ktor.client:$core_version"
                 } else {
-                    api project(":core:ktor:postssystem.core.ktor.common")
-                    api project(":ktor:postssystem.ktor.client")
+                    api projectByName("postssystem.core.ktor.common")
+                    api projectByName("postssystem.ktor.client")
                 }
             }
         }
diff --git a/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/ReadContentRepoKtorClient.kt b/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/ReadContentRepoKtorClient.kt
index 06c14148..c117dd56 100644
--- a/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/ReadContentRepoKtorClient.kt
+++ b/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/ReadContentRepoKtorClient.kt
@@ -1,32 +1,35 @@
 package com.insanusmokrassar.postssystem.core.ktor.client.content
 
-//import com.insanusmokrassar.postssystem.core.content.ContentId
-//import com.insanusmokrassar.postssystem.core.content.RegisteredContent
-//import com.insanusmokrassar.postssystem.core.content.api.ReadContentRepo
-//import com.insanusmokrassar.postssystem.core.ktor.getContentByIdRoute
-//import com.insanusmokrassar.postssystem.core.ktor.getContentsIdsRoute
-//import com.insanusmokrassar.postssystem.utils.repos.pagination.Pagination
-//import com.insanusmokrassar.postssystem.utils.repos.pagination.PaginationResult
-//import io.ktor.client.HttpClient
-//import io.ktor.client.request.get
-//import io.ktor.client.statement.HttpResponse
-//import kotlinx.io.InputStream
-//
-//class ReadContentRepoKtorClient(
-//    private val client: HttpClient,
-//    private val baseUrl: String
-//) : ReadContentRepo {
-//    override suspend fun getContentsIds(): Set<ContentId> = client.get<HttpResponse>(
-//        "$baseUrl/$getContentsIdsRoute"
-//    ).content.let {
-//        TODO()
-//    }
-//
-//    override suspend fun getContentById(id: ContentId): RegisteredContent? {
-//        TODO("Not yet implemented")
-//    }
-//
-//    override suspend fun getContentByPagination(pagination: Pagination): PaginationResult<out RegisteredContent> {
-//        TODO("Not yet implemented")
-//    }
-//}
\ No newline at end of file
+import com.insanusmokrassar.postssystem.core.content.ContentId
+import com.insanusmokrassar.postssystem.core.content.RegisteredContent
+import com.insanusmokrassar.postssystem.core.content.api.ReadContentRepo
+import com.insanusmokrassar.postssystem.core.ktor.*
+import com.insanusmokrassar.postssystem.ktor.standardKtorSerializer
+import com.insanusmokrassar.postssystem.utils.repos.pagination.Pagination
+import com.insanusmokrassar.postssystem.utils.repos.pagination.PaginationResult
+import io.ktor.client.HttpClient
+import io.ktor.client.request.get
+import kotlinx.serialization.builtins.nullable
+
+class ReadContentRepoKtorClient(
+    private val client: HttpClient,
+    private val baseUrl: String
+) : ReadContentRepo {
+    override suspend fun getContentsIds(): Set<ContentId> = client.get<ByteArray>(
+        "$baseUrl/$getContentsIdsRoute"
+    ).let {
+        standardKtorSerializer.load(contentIdsSerializer, it)
+    }
+
+    override suspend fun getContentById(id: ContentId): RegisteredContent? = client.get<ByteArray>(
+        "$baseUrl/$getContentByIdRoute"
+    ).let {
+        standardKtorSerializer.load(RegisteredContent.serializer().nullable, it)
+    }
+
+    override suspend fun getContentByPagination(pagination: Pagination): PaginationResult<out RegisteredContent> = client.get<ByteArray>(
+        "$baseUrl/$getContentByPaginationRoute"
+    ).let {
+        standardKtorSerializer.load(registeredContentPaginationResultSerializer, it)
+    }
+}
\ No newline at end of file
diff --git a/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/WriteContentRepoKtorClient.kt b/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/WriteContentRepoKtorClient.kt
new file mode 100644
index 00000000..4d667694
--- /dev/null
+++ b/core/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/client/content/WriteContentRepoKtorClient.kt
@@ -0,0 +1,15 @@
+package com.insanusmokrassar.postssystem.core.ktor.client.content
+
+import com.insanusmokrassar.postssystem.core.content.*
+import com.insanusmokrassar.postssystem.core.content.api.WriteContentRepo
+
+class WriteContentRepoKtorClient : WriteContentRepo {
+    override suspend fun registerContent(content: Content): RegisteredContent? {
+        TODO("Not yet implemented")
+    }
+
+    override suspend fun deleteContent(id: ContentId): Boolean {
+        TODO("Not yet implemented")
+    }
+
+}
\ No newline at end of file
diff --git a/core/ktor/common/build.gradle b/core/ktor/common/build.gradle
index 6fb480de..5a8f7c1b 100644
--- a/core/ktor/common/build.gradle
+++ b/core/ktor/common/build.gradle
@@ -42,8 +42,8 @@ kotlin {
                     api "com.insanusmokrassar:postssystem.ktor.common:$core_version"
                     api "com.insanusmokrassar:postssystem.core.api:$core_version"
                 } else {
-                    api project(":ktor:postssystem.ktor.common")
-                    api project(":core:postssystem.core.api")
+                    api projectByName("postssystem.ktor.common")
+                    api projectByName("postssystem.core.api")
                 }
             }
         }
diff --git a/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Routes.kt b/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Routes.kt
index fe6d11f7..2cec58e0 100644
--- a/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Routes.kt
+++ b/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Routes.kt
@@ -3,3 +3,6 @@ package com.insanusmokrassar.postssystem.core.ktor
 const val getContentsIdsRoute = "getContentsIds"
 const val getContentByIdRoute = "getContentById"
 const val getContentByPaginationRoute = "getContentByPagination"
+
+const val registerContentRoute = "registerContent"
+const val deleteContentRoute = "deleteContent"
diff --git a/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Serializers.kt b/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Serializers.kt
new file mode 100644
index 00000000..576e9595
--- /dev/null
+++ b/core/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/core/ktor/Serializers.kt
@@ -0,0 +1,8 @@
+package com.insanusmokrassar.postssystem.core.ktor
+
+import com.insanusmokrassar.postssystem.core.content.RegisteredContent
+import com.insanusmokrassar.postssystem.ktor.setIdsSerializer
+import com.insanusmokrassar.postssystem.utils.repos.pagination.PaginationResult
+
+val contentIdsSerializer = setIdsSerializer
+val registeredContentPaginationResultSerializer = PaginationResult.serializer(RegisteredContent.serializer())
diff --git a/exposed/commons/build.gradle b/exposed/commons/build.gradle
index 2c240ae8..991f2635 100644
--- a/exposed/commons/build.gradle
+++ b/exposed/commons/build.gradle
@@ -38,7 +38,7 @@ dependencies {
     if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
         api "com.insanusmokrassar:postssystem.utils.repos:$core_version"
     } else {
-        api project(":utils:repos:postssystem.utils.repos.common")
+        api projectByName("postssystem.utils.repos.common")
     }
 
     testImplementation "org.jetbrains.kotlin:kotlin-test"
diff --git a/ktor/client/build.gradle b/ktor/client/build.gradle
index 3766bb38..55421d07 100644
--- a/ktor/client/build.gradle
+++ b/ktor/client/build.gradle
@@ -41,7 +41,7 @@ kotlin {
                 if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
                     api "com.insanusmokrassar:postssystem.ktor.common:$core_version"
                 } else {
-                    api project(":ktor:postssystem.ktor.common")
+                    api projectByName("postssystem.ktor.common")
                 }
 
                 api "io.ktor:ktor-client-core:$ktor_version"
diff --git a/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/ktor/CollectionsSerializers.kt b/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/ktor/CollectionsSerializers.kt
new file mode 100644
index 00000000..0f0a6135
--- /dev/null
+++ b/ktor/common/src/commonMain/kotlin/com/insanusmokrassar/postssystem/ktor/CollectionsSerializers.kt
@@ -0,0 +1,6 @@
+package com.insanusmokrassar.postssystem.ktor
+
+import kotlinx.serialization.builtins.SetSerializer
+import kotlinx.serialization.builtins.serializer
+
+val setIdsSerializer = SetSerializer(String.serializer())
diff --git a/markups/build.gradle b/markups/commons/build.gradle
similarity index 97%
rename from markups/build.gradle
rename to markups/commons/build.gradle
index 87783e84..106eb991 100644
--- a/markups/build.gradle
+++ b/markups/commons/build.gradle
@@ -43,7 +43,7 @@ kotlin {
                 if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
                     api "com.insanusmokrassar:postssystem.core.api:$core_version"
                 } else {
-                    api project(":core:postssystem.core.api")
+                    api projectByName("postssystem.core.api")
                 }
 
                 api "com.soywiz.korlibs.klock:klock:$klockVersion"
diff --git a/markups/maven.publish.gradle b/markups/commons/maven.publish.gradle
similarity index 100%
rename from markups/maven.publish.gradle
rename to markups/commons/maven.publish.gradle
diff --git a/markups/publish.gradle b/markups/commons/publish.gradle
similarity index 100%
rename from markups/publish.gradle
rename to markups/commons/publish.gradle
diff --git a/markups/publish_config.kpsb b/markups/commons/publish_config.kpsb
similarity index 100%
rename from markups/publish_config.kpsb
rename to markups/commons/publish_config.kpsb
diff --git a/markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt b/markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt
similarity index 100%
rename from markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt
rename to markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt
diff --git a/markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt b/markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt
similarity index 100%
rename from markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt
rename to markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt
diff --git a/markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt b/markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt
similarity index 100%
rename from markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt
rename to markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt
diff --git a/markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt b/markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt
similarity index 100%
rename from markups/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt
rename to markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt
diff --git a/markups/html/build.gradle b/markups/html/build.gradle
index 2780a39e..74947d60 100644
--- a/markups/html/build.gradle
+++ b/markups/html/build.gradle
@@ -13,8 +13,8 @@ buildscript {
 }
 
 plugins {
-    id "org.jetbrains.kotlin.multiplatform"
-    id "org.jetbrains.kotlin.plugin.serialization"
+    id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
+    id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
 }
 
 project.version = "$core_version"
@@ -43,7 +43,7 @@ kotlin {
                 if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
                     api "com.insanusmokrassar:postssystem.markups.core:$core_version"
                 } else {
-                    api project(":markups")
+                    api projectByName("postssystem.markups.commons")
                 }
             }
         }
diff --git a/publishing/api/build.gradle b/publishing/api/build.gradle
index 7d3ed840..5590f780 100644
--- a/publishing/api/build.gradle
+++ b/publishing/api/build.gradle
@@ -41,7 +41,7 @@ kotlin {
                 if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
                     api "com.insanusmokrassar:postssystem.core.api:$core_version"
                 } else {
-                    api project(":core:postssystem.core.api")
+                    api projectByName("postssystem.core.api")
                 }
             }
         }
diff --git a/publishing/exposed/build.gradle b/publishing/exposed/build.gradle
index b198520d..95562167 100644
--- a/publishing/exposed/build.gradle
+++ b/publishing/exposed/build.gradle
@@ -37,8 +37,8 @@ dependencies {
         api "com.insanusmokrassar:postssystem.core.publishing:$core_version"
         api "com.insanusmokrassar:postssystem.exposed.commons:$core_version"
     } else {
-        api project(":publishing:postssystem.publishing.api")
-        api project(":exposed:postssystem.exposed.commons")
+        api projectByName("postssystem.publishing.api")
+        api projectByName("postssystem.exposed.commons")
     }
 
     testImplementation "org.xerial:sqlite-jdbc:$test_sqlite_version"
diff --git a/settings.gradle b/settings.gradle
index 1ae869cc..d3948ba0 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,30 +1,25 @@
 rootProject.name='postssystem'
 
 String[] includes = [
-    ':utils',
     ':utils:repos',
     ':utils:repos:common',
     ':utils:repos:exposed',
 
-    ':exposed',
     ':exposed:commons',
 
-    ':ktor',
     ':ktor:common',
     ':ktor:client',
 
-    ':core',
     ':core:api',
     ':core:exposed',
     ':core:ktor',
     ':core:ktor:common',
     ':core:ktor:client',
 
-    ':publishing',
     ':publishing:api',
     ':publishing:exposed',
 
-    ':markups',
+    ':markups:commons',
     ':markups:html'
 ]
 
@@ -32,6 +27,5 @@ String[] includes = [
 includes.each {
     include it
     ProjectDescriptor project = project(it)
-    println(project.projectDir.absolutePath.replace(rootDir.absolutePath, ""))
     project.name = rootProject.name + project.projectDir.absolutePath.replace(rootDir.absolutePath, "").replace("/", ".")
 }
diff --git a/utils/repos/exposed/build.gradle b/utils/repos/exposed/build.gradle
index 43cf9ca1..cd6df5b3 100644
--- a/utils/repos/exposed/build.gradle
+++ b/utils/repos/exposed/build.gradle
@@ -37,8 +37,8 @@ dependencies {
         api "com.insanusmokrassar:postssystem.utils.repos:$core_version"
         api "com.insanusmokrassar:postssystem.exposed.commons:$core_version"
     } else {
-        api project(":utils:repos:postssystem.utils.repos.common")
-        api project(":exposed:postssystem.exposed.commons")
+        api projectByName("postssystem.utils.repos.common")
+        api projectByName("postssystem.exposed.commons")
     }
 
     testImplementation "org.xerial:sqlite-jdbc:$test_sqlite_version"