diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e34e39cab8..2fda808c1e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 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/gradle.properties b/gradle.properties index bf512cd5da5..12b4beb8694 100644 --- a/gradle.properties +++ b/gradle.properties @@ -45,5 +45,5 @@ dokka_version=1.6.10 # Project data group=dev.inmo -version=0.9.6 -android_code_version=96 +version=0.9.7 +android_code_version=97 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) }