diff --git a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorReadStandardCrudRepo.kt b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt similarity index 97% rename from utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorReadStandardCrudRepo.kt rename to utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt index 57593948..ab9b5ef4 100644 --- a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorReadStandardCrudRepo.kt +++ b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorReadStandardCrudRepo.kt @@ -1,4 +1,4 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.client +package com.insanusmokrassar.postssystem.utils.repos.ktor.client.crud import com.insanusmokrassar.postssystem.ktor.* import com.insanusmokrassar.postssystem.ktor.client.uniget @@ -9,7 +9,6 @@ import com.insanusmokrassar.postssystem.utils.repos.ktor.common.* import io.ktor.client.HttpClient import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.encodeToHexString class KtorReadStandardCrudRepo ( private val baseUrl: String, diff --git a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorStandardCrudRepo.kt b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt similarity index 99% rename from utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorStandardCrudRepo.kt rename to utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt index 127d2ea6..34a98223 100644 --- a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorStandardCrudRepo.kt +++ b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorStandardCrudRepo.kt @@ -1,4 +1,4 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.client +package com.insanusmokrassar.postssystem.utils.repos.ktor.client.crud import com.insanusmokrassar.postssystem.utils.repos.* import io.ktor.client.HttpClient diff --git a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorWriteStandardCrudRepo.kt b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt similarity index 99% rename from utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorWriteStandardCrudRepo.kt rename to utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt index fdb845e3..dd8666fb 100644 --- a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorWriteStandardCrudRepo.kt +++ b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/crud/KtorWriteStandardCrudRepo.kt @@ -1,4 +1,4 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.client +package com.insanusmokrassar.postssystem.utils.repos.ktor.client.crud import com.insanusmokrassar.postssystem.ktor.* import com.insanusmokrassar.postssystem.ktor.client.* diff --git a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt new file mode 100644 index 00000000..034b9d87 --- /dev/null +++ b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyKeyValueRepo.kt @@ -0,0 +1,27 @@ +package com.insanusmokrassar.postssystem.utils.repos.ktor.client.one_to_many + +import com.insanusmokrassar.postssystem.utils.repos.OneToManyKeyValueRepo +import com.insanusmokrassar.postssystem.utils.repos.OneToManyReadKeyValueRepo +import com.insanusmokrassar.postssystem.utils.repos.OneToManyWriteKeyValueRepo +import io.ktor.client.* +import kotlinx.serialization.KSerializer + +class KtorOneToManyKeyValueRepo( + baseUrl: String, + baseSubpart: String, + client: HttpClient, + keySerializer: KSerializer, + valueSerializer: KSerializer, +) : OneToManyKeyValueRepo, + OneToManyReadKeyValueRepo by KtorOneToManyReadKeyValueRepo ( + "$baseUrl/$baseSubpart", + client, + keySerializer, + valueSerializer, + ), + OneToManyWriteKeyValueRepo by KtorOneToManyWriteKeyValueRepo ( + "$baseUrl/$baseSubpart", + client, + keySerializer, + valueSerializer, + ) \ No newline at end of file diff --git a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorOneToManyKeyValueRepo.kt b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyReadKeyValueRepo.kt similarity index 58% rename from utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorOneToManyKeyValueRepo.kt rename to utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyReadKeyValueRepo.kt index 7f00f45b..7f5c5113 100644 --- a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/KtorOneToManyKeyValueRepo.kt +++ b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyReadKeyValueRepo.kt @@ -1,19 +1,14 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.client +package com.insanusmokrassar.postssystem.utils.repos.ktor.client.one_to_many import com.insanusmokrassar.postssystem.ktor.* -import com.insanusmokrassar.postssystem.ktor.client.BodyPair import com.insanusmokrassar.postssystem.ktor.client.uniget -import com.insanusmokrassar.postssystem.ktor.client.unipost 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.client.* +import io.ktor.client.HttpClient import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.encodeToHexString class KtorOneToManyReadKeyValueRepo ( private val baseUrl: String, @@ -87,58 +82,4 @@ class KtorOneToManyReadKeyValueRepo ( Long.serializer() ) -} - -class KtorOneToManyWriteKeyValueRepo ( - private val baseUrl: String, - private val client: HttpClient = HttpClient(), - private val keySerializer: KSerializer, - private val valueSerializer: KSerializer, -) : OneToManyWriteKeyValueRepo { - override suspend fun add(k: Key, v: Value) = client.unipost( - buildStandardUrl( - baseUrl, - addRoute, - ), - BodyPair(KeyValuePostObject.serializer(keySerializer, valueSerializer), KeyValuePostObject(k, v)), - Unit.serializer(), - ) - - override suspend fun remove(k: Key, v: Value) = client.unipost( - buildStandardUrl( - baseUrl, - removeRoute, - ), - BodyPair(KeyValuePostObject.serializer(keySerializer, valueSerializer), KeyValuePostObject(k, v)), - Unit.serializer(), - ) - - override suspend fun clear(k: Key) = client.unipost( - buildStandardUrl( - baseUrl, - clearRoute, - ), - BodyPair(keySerializer, k), - Unit.serializer(), - ) -} - -class KtorOneToManyKeyValueRepo( - baseUrl: String, - baseSubpart: String, - client: HttpClient, - keySerializer: KSerializer, - valueSerializer: KSerializer, -) : OneToManyKeyValueRepo, - OneToManyReadKeyValueRepo by KtorOneToManyReadKeyValueRepo ( - "$baseUrl/$baseSubpart", - client, - keySerializer, - valueSerializer, - ), - OneToManyWriteKeyValueRepo by KtorOneToManyWriteKeyValueRepo ( - "$baseUrl/$baseSubpart", - client, - keySerializer, - valueSerializer, - ) \ No newline at end of file +} \ No newline at end of file diff --git a/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyWriteKeyValueRepo.kt b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyWriteKeyValueRepo.kt new file mode 100644 index 00000000..a819170f --- /dev/null +++ b/utils/repos/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/client/one_to_many/KtorOneToManyWriteKeyValueRepo.kt @@ -0,0 +1,44 @@ +package com.insanusmokrassar.postssystem.utils.repos.ktor.client.one_to_many + +import com.insanusmokrassar.postssystem.ktor.buildStandardUrl +import com.insanusmokrassar.postssystem.ktor.client.BodyPair +import com.insanusmokrassar.postssystem.ktor.client.unipost +import com.insanusmokrassar.postssystem.utils.repos.OneToManyWriteKeyValueRepo +import com.insanusmokrassar.postssystem.utils.repos.ktor.common.* +import io.ktor.client.HttpClient +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.serializer + +class KtorOneToManyWriteKeyValueRepo ( + private val baseUrl: String, + private val client: HttpClient = HttpClient(), + private val keySerializer: KSerializer, + private val valueSerializer: KSerializer, +) : OneToManyWriteKeyValueRepo { + override suspend fun add(k: Key, v: Value) = client.unipost( + buildStandardUrl( + baseUrl, + addRoute, + ), + BodyPair(KeyValuePostObject.serializer(keySerializer, valueSerializer), KeyValuePostObject(k, v)), + Unit.serializer(), + ) + + override suspend fun remove(k: Key, v: Value) = client.unipost( + buildStandardUrl( + baseUrl, + removeRoute, + ), + BodyPair(KeyValuePostObject.serializer(keySerializer, valueSerializer), KeyValuePostObject(k, v)), + Unit.serializer(), + ) + + override suspend fun clear(k: Key) = client.unipost( + buildStandardUrl( + baseUrl, + clearRoute, + ), + BodyPair(keySerializer, k), + Unit.serializer(), + ) +} \ No newline at end of file diff --git a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorReadStandardCrudRepo.kt b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorReadStandardCrudRepo.kt similarity index 93% rename from utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorReadStandardCrudRepo.kt rename to utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorReadStandardCrudRepo.kt index e3f4e355..3b73ab75 100644 --- a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorReadStandardCrudRepo.kt +++ b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorReadStandardCrudRepo.kt @@ -1,7 +1,6 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.server +package com.insanusmokrassar.postssystem.utils.repos.ktor.server.crud import com.insanusmokrassar.postssystem.ktor.server.* -import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat import com.insanusmokrassar.postssystem.utils.common.pagination.PaginationResult import com.insanusmokrassar.postssystem.utils.repos.ReadStandardCRUDRepo import com.insanusmokrassar.postssystem.utils.repos.ktor.common.* @@ -10,7 +9,6 @@ import io.ktor.routing.Route import io.ktor.routing.get import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.decodeFromHexString fun Route.configureReadStandardCrudRepoRoutes( originalRepo: ReadStandardCRUDRepo, diff --git a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorStandardCrudRepo.kt b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorStandardCrudRepo.kt similarity index 66% rename from utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorStandardCrudRepo.kt rename to utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorStandardCrudRepo.kt index 741006d4..e8410b03 100644 --- a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorStandardCrudRepo.kt +++ b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorStandardCrudRepo.kt @@ -1,16 +1,8 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.server +package com.insanusmokrassar.postssystem.utils.repos.ktor.server.crud -import com.insanusmokrassar.postssystem.ktor.server.* -import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat -import com.insanusmokrassar.postssystem.utils.common.pagination.PaginationResult import com.insanusmokrassar.postssystem.utils.repos.* -import com.insanusmokrassar.postssystem.utils.repos.ktor.common.* -import io.ktor.application.call import io.ktor.routing.* -import io.ktor.routing.get import kotlinx.serialization.KSerializer -import kotlinx.serialization.builtins.* -import kotlinx.serialization.decodeFromHexString fun Route.configureStandardCrudRepoRoutes( baseSubpart: String, diff --git a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorWriteStandardCrudRepo.kt b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorWriteStandardCrudRepo.kt similarity index 88% rename from utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorWriteStandardCrudRepo.kt rename to utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorWriteStandardCrudRepo.kt index 1f7b5973..37f00f39 100644 --- a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorWriteStandardCrudRepo.kt +++ b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/crud/KtorWriteStandardCrudRepo.kt @@ -1,17 +1,12 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.server +package com.insanusmokrassar.postssystem.utils.repos.ktor.server.crud import com.insanusmokrassar.postssystem.ktor.server.* -import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat -import com.insanusmokrassar.postssystem.utils.common.pagination.PaginationResult -import com.insanusmokrassar.postssystem.utils.repos.ReadStandardCRUDRepo import com.insanusmokrassar.postssystem.utils.repos.WriteStandardCRUDRepo import com.insanusmokrassar.postssystem.utils.repos.ktor.common.* import io.ktor.application.call import io.ktor.routing.* -import io.ktor.routing.get import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.* -import kotlinx.serialization.decodeFromHexString fun Route.configureWriteStandardCrudRepoRoutes( originalRepo: WriteStandardCRUDRepo, diff --git a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyKeyValueRepoRoutes.kt b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyKeyValueRepoRoutes.kt new file mode 100644 index 00000000..1463ced4 --- /dev/null +++ b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyKeyValueRepoRoutes.kt @@ -0,0 +1,17 @@ +package com.insanusmokrassar.postssystem.utils.repos.ktor.server.one_to_many + +import com.insanusmokrassar.postssystem.utils.repos.OneToManyKeyValueRepo +import io.ktor.routing.* +import kotlinx.serialization.KSerializer + +fun Route.configureOneToManyKeyValueRepoRoutes( + baseSubpart: String, + originalRepo: OneToManyKeyValueRepo, + keySerializer: KSerializer, + valueSealizer: KSerializer, +) { + route(baseSubpart) { + configureOneToManyReadKeyValueRepoRoutes(originalRepo, keySerializer, valueSealizer) + configureOneToManyWriteKeyValueRepoRoutes(originalRepo, keySerializer, valueSealizer) + } +} \ No newline at end of file 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/one_to_many/ConfigureOneToManyReadKeyValueRepoRoutes.kt similarity index 65% rename from utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/KtorOneToManyKeyValueRepo.kt rename to utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyReadKeyValueRepoRoutes.kt index e00812fd..e90eacad 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/one_to_many/ConfigureOneToManyReadKeyValueRepoRoutes.kt @@ -1,14 +1,13 @@ -package com.insanusmokrassar.postssystem.utils.repos.ktor.server +package com.insanusmokrassar.postssystem.utils.repos.ktor.server.one_to_many import com.insanusmokrassar.postssystem.ktor.server.* import com.insanusmokrassar.postssystem.ktor.standardKtorSerialFormat 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.* +import io.ktor.application.call +import io.ktor.routing.Route +import io.ktor.routing.get import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer import kotlinx.serialization.decodeFromHexString @@ -97,53 +96,4 @@ fun Route.configureOneToManyReadKeyValueRepoRoutes( originalRepo.count() ) } -} - -fun Route.configureOneToManyWriteKeyValueRepoRoutes( - originalRepo: OneToManyWriteKeyValueRepo, - keySerializer: KSerializer, - valueSealizer: KSerializer, -) { - 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 Route.configureOneToManyKeyValueRepoRoutes( - baseSubpart: String, - originalRepo: OneToManyKeyValueRepo, - keySerializer: KSerializer, - valueSealizer: KSerializer, -) { - route(baseSubpart) { - configureOneToManyReadKeyValueRepoRoutes(originalRepo, keySerializer, valueSealizer) - configureOneToManyWriteKeyValueRepoRoutes(originalRepo, keySerializer, valueSealizer) - } } \ No newline at end of file diff --git a/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyWriteKeyValueRepoRoutes.kt b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyWriteKeyValueRepoRoutes.kt new file mode 100644 index 00000000..23eb6d23 --- /dev/null +++ b/utils/repos/ktor/server/src/jvmMain/kotlin/com/insanusmokrassar/postssystem/utils/repos/ktor/server/one_to_many/ConfigureOneToManyWriteKeyValueRepoRoutes.kt @@ -0,0 +1,48 @@ +package com.insanusmokrassar.postssystem.utils.repos.ktor.server.one_to_many + +import com.insanusmokrassar.postssystem.ktor.server.unianswer +import com.insanusmokrassar.postssystem.ktor.server.uniload +import com.insanusmokrassar.postssystem.utils.repos.OneToManyWriteKeyValueRepo +import com.insanusmokrassar.postssystem.utils.repos.ktor.common.* +import io.ktor.application.call +import io.ktor.routing.Route +import io.ktor.routing.post +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.serializer + +fun Route.configureOneToManyWriteKeyValueRepoRoutes( + originalRepo: OneToManyWriteKeyValueRepo, + keySerializer: KSerializer, + valueSealizer: KSerializer, +) { + 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), + ) + } +} \ No newline at end of file