impl client and server for KeyValueRepo
This commit is contained in:
utils/repos/ktor
client
src
commonMain
kotlin
com
insanusmokrassar
postssystem
utils
repos
common
src
commonMain
kotlin
com
insanusmokrassar
postssystem
utils
repos
ktor
server
src
jvmMain
kotlin
com
insanusmokrassar
postssystem
utils
repos
@@ -0,0 +1,27 @@
|
||||
package com.insanusmokrassar.postssystem.utils.repos.ktor.server.key_value
|
||||
|
||||
import com.insanusmokrassar.postssystem.utils.repos.StandardKeyValueRepo
|
||||
import io.ktor.routing.*
|
||||
import kotlinx.serialization.KSerializer
|
||||
|
||||
fun <K, V> Route.configureStandartKeyValueRepoRoutes(
|
||||
baseSubpart: String,
|
||||
originalRepo: StandardKeyValueRepo<K, V>,
|
||||
keySerializer: KSerializer<K>,
|
||||
valueSerializer: KSerializer<V>,
|
||||
valueNullableSerializer: KSerializer<V?>,
|
||||
) {
|
||||
route(baseSubpart) {
|
||||
configureReadStandartKeyValueRepoRoutes(
|
||||
originalRepo,
|
||||
keySerializer,
|
||||
valueSerializer,
|
||||
valueNullableSerializer,
|
||||
)
|
||||
configureWriteStandartKeyValueRepoRoutes(
|
||||
originalRepo,
|
||||
keySerializer,
|
||||
valueSerializer,
|
||||
)
|
||||
}
|
||||
}
|
@@ -0,0 +1,76 @@
|
||||
package com.insanusmokrassar.postssystem.utils.repos.ktor.server.key_value
|
||||
|
||||
import com.insanusmokrassar.postssystem.ktor.server.extractPagination
|
||||
import com.insanusmokrassar.postssystem.ktor.server.unianswer
|
||||
import com.insanusmokrassar.postssystem.ktor.server.uniloadFromQueryOrSendError
|
||||
import com.insanusmokrassar.postssystem.utils.common.pagination.PaginationResult
|
||||
import com.insanusmokrassar.postssystem.utils.repos.StandardReadKeyValueRepo
|
||||
import com.insanusmokrassar.postssystem.utils.repos.ktor.common.key_value.*
|
||||
import io.ktor.application.*
|
||||
import io.ktor.routing.*
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
|
||||
fun <K, V> Route.configureReadStandartKeyValueRepoRoutes (
|
||||
originalRepo: StandardReadKeyValueRepo<K, V>,
|
||||
keySerializer: KSerializer<K>,
|
||||
valueSerializer: KSerializer<V>,
|
||||
valueNullableSerializer: KSerializer<V?>,
|
||||
) {
|
||||
get(getRoute) {
|
||||
val key = call.uniloadFromQueryOrSendError(
|
||||
keyParameterName,
|
||||
keySerializer
|
||||
) ?: return@get
|
||||
|
||||
call.unianswer(
|
||||
valueNullableSerializer,
|
||||
originalRepo.get(key)
|
||||
)
|
||||
}
|
||||
|
||||
get(valuesRoute) {
|
||||
val parination = call.request.queryParameters.extractPagination;
|
||||
val reversed = call.uniloadFromQueryOrSendError(
|
||||
reversedParameterName,
|
||||
Boolean.serializer()
|
||||
) ?: return@get
|
||||
|
||||
call.unianswer(
|
||||
PaginationResult.serializer(valueSerializer),
|
||||
originalRepo.values(parination, reversed)
|
||||
)
|
||||
}
|
||||
|
||||
get(keysRoute) {
|
||||
val parination = call.request.queryParameters.extractPagination;
|
||||
val reversed = call.uniloadFromQueryOrSendError(
|
||||
reversedParameterName,
|
||||
Boolean.serializer()
|
||||
) ?: return@get
|
||||
|
||||
call.unianswer(
|
||||
PaginationResult.serializer(keySerializer),
|
||||
originalRepo.keys(parination, reversed)
|
||||
)
|
||||
}
|
||||
|
||||
get(containsRoute) {
|
||||
val key = call.uniloadFromQueryOrSendError(
|
||||
keyParameterName,
|
||||
keySerializer
|
||||
) ?: return@get
|
||||
|
||||
call.unianswer(
|
||||
Boolean.serializer(),
|
||||
originalRepo.contains(key)
|
||||
)
|
||||
}
|
||||
|
||||
get(countRoute) {
|
||||
call.unianswer(
|
||||
Long.serializer(),
|
||||
originalRepo.count()
|
||||
)
|
||||
}
|
||||
}
|
@@ -0,0 +1,44 @@
|
||||
package com.insanusmokrassar.postssystem.utils.repos.ktor.server.key_value
|
||||
|
||||
import com.insanusmokrassar.postssystem.ktor.server.includeWebsocketHandling
|
||||
import com.insanusmokrassar.postssystem.ktor.server.uniload
|
||||
import com.insanusmokrassar.postssystem.utils.repos.StandardWriteKeyValueRepo
|
||||
import com.insanusmokrassar.postssystem.utils.repos.ktor.common.key_value.*
|
||||
import io.ktor.application.*
|
||||
import io.ktor.routing.*
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.PairSerializer
|
||||
|
||||
fun <K, V> Route.configureWriteStandartKeyValueRepoRoutes (
|
||||
originalRepo: StandardWriteKeyValueRepo<K, V>,
|
||||
keySerializer: KSerializer<K>,
|
||||
valueSerializer: KSerializer<V>,
|
||||
) {
|
||||
includeWebsocketHandling(
|
||||
onNewValueRoute,
|
||||
originalRepo.onNewValue,
|
||||
PairSerializer(keySerializer, valueSerializer)
|
||||
)
|
||||
|
||||
includeWebsocketHandling(
|
||||
onValueRemovedRoute,
|
||||
originalRepo.onValueRemoved,
|
||||
keySerializer
|
||||
)
|
||||
|
||||
post(setRoute) {
|
||||
val (key, value) = call.uniload(
|
||||
KeyValuePostObject.serializer(keySerializer, valueSerializer)
|
||||
)
|
||||
|
||||
originalRepo.set(key, value)
|
||||
}
|
||||
|
||||
post(unsetRoute) {
|
||||
val key = call.uniload(
|
||||
keySerializer
|
||||
)
|
||||
|
||||
originalRepo.unset(key)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user