2020-09-22 01:47:01 +00:00
|
|
|
package dev.inmo.micro_utils.repos.ktor.server.one_to_many
|
|
|
|
|
2020-11-27 08:35:00 +00:00
|
|
|
import dev.inmo.micro_utils.ktor.common.StandardKtorSerialFormat
|
|
|
|
import dev.inmo.micro_utils.ktor.common.standardKtorSerialFormat
|
2020-10-14 16:02:10 +00:00
|
|
|
import dev.inmo.micro_utils.ktor.server.*
|
|
|
|
import dev.inmo.micro_utils.repos.WriteOneToManyKeyValueRepo
|
2020-09-22 01:47:01 +00:00
|
|
|
import dev.inmo.micro_utils.repos.ktor.common.one_to_many.*
|
2020-11-27 08:35:00 +00:00
|
|
|
import io.ktor.http.ContentType
|
2022-04-27 08:39:21 +00:00
|
|
|
import io.ktor.server.routing.Route
|
|
|
|
import io.ktor.server.routing.post
|
2020-09-22 01:47:01 +00:00
|
|
|
import kotlinx.serialization.KSerializer
|
2020-11-06 20:25:50 +00:00
|
|
|
import kotlinx.serialization.builtins.*
|
2020-09-22 01:47:01 +00:00
|
|
|
|
|
|
|
fun <Key, Value> Route.configureOneToManyWriteKeyValueRepoRoutes(
|
2020-10-14 16:02:10 +00:00
|
|
|
originalRepo: WriteOneToManyKeyValueRepo<Key, Value>,
|
2020-09-22 01:47:01 +00:00
|
|
|
keySerializer: KSerializer<Key>,
|
2020-11-06 20:25:50 +00:00
|
|
|
valueSerializer: KSerializer<Value>,
|
2020-11-27 08:35:00 +00:00
|
|
|
unifiedRouter: UnifiedRouter
|
2020-09-22 01:47:01 +00:00
|
|
|
) {
|
2020-11-06 20:25:50 +00:00
|
|
|
val keyValueSerializer = PairSerializer(keySerializer, valueSerializer)
|
|
|
|
val keyValueMapSerializer = MapSerializer(keySerializer, ListSerializer(valueSerializer))
|
2020-09-22 01:47:01 +00:00
|
|
|
|
2020-11-27 08:35:00 +00:00
|
|
|
unifiedRouter.apply {
|
|
|
|
includeWebsocketHandling(
|
|
|
|
onNewValueRoute,
|
|
|
|
originalRepo.onNewValue,
|
|
|
|
keyValueSerializer
|
|
|
|
)
|
|
|
|
includeWebsocketHandling(
|
|
|
|
onValueRemovedRoute,
|
|
|
|
originalRepo.onValueRemoved,
|
|
|
|
keyValueSerializer
|
|
|
|
)
|
|
|
|
includeWebsocketHandling(
|
|
|
|
onDataClearedRoute,
|
|
|
|
originalRepo.onDataCleared,
|
|
|
|
keySerializer
|
|
|
|
)
|
|
|
|
}
|
2020-10-14 16:02:10 +00:00
|
|
|
|
2020-09-22 01:47:01 +00:00
|
|
|
post(addRoute) {
|
2020-11-27 08:35:00 +00:00
|
|
|
unifiedRouter.apply {
|
|
|
|
val obj = uniload(keyValueMapSerializer)
|
2020-09-22 01:47:01 +00:00
|
|
|
|
2020-11-27 08:35:00 +00:00
|
|
|
unianswer(
|
|
|
|
Unit.serializer(),
|
|
|
|
originalRepo.add(obj)
|
|
|
|
)
|
|
|
|
}
|
2020-09-22 01:47:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
post(removeRoute) {
|
2020-11-27 08:35:00 +00:00
|
|
|
unifiedRouter.apply {
|
|
|
|
val obj = uniload(keyValueMapSerializer)
|
2020-09-22 01:47:01 +00:00
|
|
|
|
2020-11-27 08:35:00 +00:00
|
|
|
unianswer(
|
|
|
|
Unit.serializer(),
|
|
|
|
originalRepo.remove(obj),
|
|
|
|
)
|
|
|
|
}
|
2020-09-22 01:47:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
post(clearRoute) {
|
2020-11-27 08:35:00 +00:00
|
|
|
unifiedRouter.apply {
|
|
|
|
val key = uniload(keySerializer)
|
2020-09-22 01:47:01 +00:00
|
|
|
|
2020-11-27 08:35:00 +00:00
|
|
|
unianswer(
|
|
|
|
Unit.serializer(),
|
|
|
|
originalRepo.clear(key),
|
|
|
|
)
|
|
|
|
}
|
2020-09-22 01:47:01 +00:00
|
|
|
}
|
2020-11-18 14:27:29 +00:00
|
|
|
|
2021-06-15 08:24:00 +00:00
|
|
|
post(clearWithValueRoute) {
|
|
|
|
unifiedRouter.apply {
|
|
|
|
val v = uniload(valueSerializer)
|
|
|
|
|
|
|
|
unianswer(
|
|
|
|
Unit.serializer(),
|
|
|
|
originalRepo.clearWithValue(v),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-18 14:27:29 +00:00
|
|
|
post(setRoute) {
|
2020-11-27 08:35:00 +00:00
|
|
|
unifiedRouter.apply {
|
|
|
|
val obj = uniload(keyValueMapSerializer)
|
2020-11-18 14:27:29 +00:00
|
|
|
|
2020-11-27 08:35:00 +00:00
|
|
|
unianswer(
|
|
|
|
Unit.serializer(),
|
|
|
|
originalRepo.set(obj)
|
|
|
|
)
|
|
|
|
}
|
2020-11-18 14:27:29 +00:00
|
|
|
}
|
2020-11-27 08:35:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fun <Key, Value> Route.configureOneToManyWriteKeyValueRepoRoutes(
|
|
|
|
originalRepo: WriteOneToManyKeyValueRepo<Key, Value>,
|
|
|
|
keySerializer: KSerializer<Key>,
|
|
|
|
valueSerializer: KSerializer<Value>,
|
|
|
|
serialFormat: StandardKtorSerialFormat = standardKtorSerialFormat,
|
|
|
|
serialFormatContentType: ContentType = standardKtorSerialFormatContentType
|
|
|
|
) = configureOneToManyWriteKeyValueRepoRoutes(originalRepo, keySerializer, valueSerializer, UnifiedRouter(serialFormat, serialFormatContentType))
|