read kerver impl
This commit is contained in:
parent
89bef924be
commit
20dba28f13
@ -0,0 +1,101 @@
|
||||
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.standardKtorSerialFormat
|
||||
import com.insanusmokrassar.postssystem.utils.common.pagination.Pagination
|
||||
import com.insanusmokrassar.postssystem.utils.common.pagination.PaginationResult
|
||||
import com.insanusmokrassar.postssystem.utils.repos.OneToManyReadKeyValueRepo
|
||||
import com.insanusmokrassar.postssystem.utils.repos.ktor.common.*
|
||||
import io.ktor.application.*
|
||||
import io.ktor.routing.*
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.decodeFromHexString
|
||||
|
||||
fun <Key, Value> Route.configureOneToManyReadKeyValueRepoRoutes(
|
||||
originalRepo: OneToManyReadKeyValueRepo<Key, Value>,
|
||||
keySerializer: KSerializer<Key>,
|
||||
valueSealizer: KSerializer<Value>,
|
||||
) {
|
||||
val paginationKeyResult = PaginationResult.serializer(keySerializer)
|
||||
val paginationValueResult = PaginationResult.serializer(valueSealizer)
|
||||
|
||||
get(getRoute) {
|
||||
val pagination = call.request.queryParameters.extractPagination
|
||||
val key = standardKtorSerialFormat.decodeFromHexString(
|
||||
keySerializer,
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
) // TODO: Леша, а это можно сократить как-то до call.decodeFromQueryHexParameter(keySerializer, keyParameterName)?
|
||||
val reversed = standardKtorSerialFormat.decodeFromHexString(
|
||||
Boolean.serializer(),
|
||||
call.getQueryParameterOrSendError(reversedParameterName) ?: return@get
|
||||
)
|
||||
|
||||
call.unianswer(
|
||||
paginationValueResult,
|
||||
originalRepo.get(key, pagination, reversed)
|
||||
)
|
||||
}
|
||||
|
||||
get(keysRoute) {
|
||||
val pagination = call.request.queryParameters.extractPagination
|
||||
val reversed = standardKtorSerialFormat.decodeFromHexString(
|
||||
Boolean.serializer(),
|
||||
call.getQueryParameterOrSendError(reversedParameterName) ?: return@get
|
||||
)
|
||||
|
||||
call.unianswer(
|
||||
paginationKeyResult,
|
||||
originalRepo.keys(pagination, reversed)
|
||||
)
|
||||
}
|
||||
|
||||
get(containsByKeyRoute) {
|
||||
val key = standardKtorSerialFormat.decodeFromHexString(
|
||||
keySerializer,
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
|
||||
call.unianswer(
|
||||
Boolean.serializer(),
|
||||
originalRepo.contains(key)
|
||||
)
|
||||
}
|
||||
|
||||
get(containsByKeyValueRoute) {
|
||||
val key = standardKtorSerialFormat.decodeFromHexString(
|
||||
keySerializer,
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
val value = standardKtorSerialFormat.decodeFromHexString(
|
||||
valueSealizer,
|
||||
call.getQueryParameterOrSendError(valueParameterName) ?: return@get
|
||||
)
|
||||
|
||||
call.unianswer(
|
||||
Boolean.serializer(),
|
||||
originalRepo.contains(key, value)
|
||||
)
|
||||
}
|
||||
|
||||
get(countByKeyRoute) {
|
||||
val key = standardKtorSerialFormat.decodeFromHexString(
|
||||
keySerializer,
|
||||
call.getQueryParameterOrSendError(keyParameterName) ?: return@get
|
||||
)
|
||||
|
||||
call.unianswer(
|
||||
Long.serializer(),
|
||||
originalRepo.count(key)
|
||||
)
|
||||
}
|
||||
|
||||
get(countRoute) {
|
||||
call.unianswer(
|
||||
Long.serializer(),
|
||||
originalRepo.count()
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user