From e9a1276ae11e73257f45d16d75289fa62bbadbe4 Mon Sep 17 00:00:00 2001
From: 000Sanya <000sanya.000sanya@gmail.com>
Date: Wed, 26 Aug 2020 13:11:13 +1000
Subject: [PATCH] write kerver impl

---
 .../ktor/server/KtorOneToManyKeyValueRepo.kt  | 52 +++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorOneToManyKeyValueRepo.kt b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorOneToManyKeyValueRepo.kt
index 9946861e..38a6c288 100644
--- a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorOneToManyKeyValueRepo.kt
+++ b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorOneToManyKeyValueRepo.kt
@@ -3,10 +3,13 @@ package com.insanusmokrassar.postssystem.utils.repos.ktor.server
 import com.insanusmokrassar.postssystem.ktor.server.extractPagination
 import com.insanusmokrassar.postssystem.ktor.server.getQueryParameterOrSendError
 import com.insanusmokrassar.postssystem.ktor.server.unianswer
+import com.insanusmokrassar.postssystem.ktor.server.uniload
 import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat
 import com.insanusmokrassar.postssystem.utils.common.pagination.Pagination
 import com.insanusmokrassar.postssystem.utils.common.pagination.PaginationResult
+import com.insanusmokrassar.postssystem.utils.repos.OneToManyKeyValueRepo
 import com.insanusmokrassar.postssystem.utils.repos.OneToManyReadKeyValueRepo
+import com.insanusmokrassar.postssystem.utils.repos.OneToManyWriteKeyValueRepo
 import com.insanusmokrassar.postssystem.utils.repos.ktor.common.*
 import io.ktor.application.*
 import io.ktor.routing.*
@@ -98,4 +101,53 @@ fun <Key, Value> Route.configureOneToManyReadKeyValueRepoRoutes(
             originalRepo.count()
         )
     }
+}
+
+fun <Key, Value> Route.configureOneToManyWriteKeyValueRepoRoutes(
+    originalRepo: OneToManyWriteKeyValueRepo<Key, Value>,
+    keySerializer: KSerializer<Key>,
+    valueSealizer: KSerializer<Value>,
+) {
+    post(addRoute) {
+        val obj = call.uniload(
+            KeyValuePostObject.serializer(keySerializer, valueSealizer)
+        )
+
+        call.unianswer(
+            Unit.serializer(),
+            originalRepo.add(obj.key, obj.value)
+        )
+    }
+
+    post(removeRoute) {
+        val obj = call.uniload(
+            KeyValuePostObject.serializer(keySerializer, valueSealizer)
+        )
+
+        call.unianswer(
+            Unit.serializer(),
+            originalRepo.remove(obj.key, obj.value),
+        )
+    }
+
+    post(clearRoute) {
+        val key = call.uniload(keySerializer)
+
+        call.unianswer(
+            Unit.serializer(),
+            originalRepo.clear(key),
+        )
+    }
+}
+
+fun <Key, Value> Route.configureOneToManyKeyValueRepoRoutes(
+    baseSubpart: String,
+    originalRepo: OneToManyKeyValueRepo<Key, Value>,
+    keySerializer: KSerializer<Key>,
+    valueSealizer: KSerializer<Value>,
+) {
+    route(baseSubpart) {
+        configureOneToManyReadKeyValueRepoRoutes(originalRepo, keySerializer, valueSealizer)
+        configureOneToManyWriteKeyValueRepoRoutes(originalRepo, keySerializer, valueSealizer)
+    }
 }
\ No newline at end of file