From 4f1a663e7509e103417e9ff664e5665f84d5ca88 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 8 Feb 2022 23:21:14 +0600 Subject: [PATCH] fixes in ExposedOneToManyKeyValueRepo and includeWebsocketHandling --- CHANGELOG.md | 7 +++++++ .../inmo/micro_utils/ktor/server/FlowsWebsocket.kt | 14 ++++++-------- .../onetomany/ExposedOneToManyKeyValueRepo.kt | 9 +++++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da96201ee72..2fda808c1e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## 0.9.7 +* `Repos`: + * `Exposed`: + * Fix in `ExposedOneToManyKeyValueRepo` - now it will not use `insertIgnore` +* `Ktor`: + * `Server`: + * `Route#includeWebsocketHandling` now will check that `WebSockets` feature and install it if not + ## 0.9.6 * `Repos`: diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt index bd7d9a32670..d26cd03cb08 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/FlowsWebsocket.kt @@ -2,25 +2,23 @@ package dev.inmo.micro_utils.ktor.server import dev.inmo.micro_utils.coroutines.safely import dev.inmo.micro_utils.ktor.common.* +import io.ktor.application.featureOrNull +import io.ktor.application.install import io.ktor.http.cio.websocket.* import io.ktor.routing.Route +import io.ktor.routing.application import io.ktor.websocket.webSocket import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect import kotlinx.serialization.SerializationStrategy -private suspend fun DefaultWebSocketSession.checkReceivedAndCloseIfExists() { - if (incoming.tryReceive() != null) { - close() - throw CorrectCloseException - } -} - fun Route.includeWebsocketHandling( suburl: String, flow: Flow, converter: (T) -> StandardKtorSerialInputData ) { + application.apply { + featureOrNull(io.ktor.websocket.WebSockets) ?: install(io.ktor.websocket.WebSockets) + } webSocket(suburl) { safely { flow.collect { diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/ExposedOneToManyKeyValueRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/ExposedOneToManyKeyValueRepo.kt index 20a0e57af1c..0c839ea7834 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/ExposedOneToManyKeyValueRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/ExposedOneToManyKeyValueRepo.kt @@ -35,10 +35,15 @@ open class ExposedOneToManyKeyValueRepo( if (select { keyColumn.eq(k).and(valueColumn.eq(v)) }.limit(1).count() > 0) { return@mapNotNull null } - insertIgnore { + val insertResult = insert { it[keyColumn] = k it[valueColumn] = v - }.getOrNull(keyColumn) ?.let { k to v } + } + if (insertResult.insertedCount > 0) { + k to v + } else { + null + } } ?: emptyList() } }.forEach { _onNewValue.emit(it) }