From bc98e59709c36e9f7adc7e5b22f0ce6ac2647ef8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 12 Mar 2025 08:41:51 +0600 Subject: [PATCH 1/6] start 0.25.2 --- CHANGELOG.md | 2 ++ gradle.properties | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a12e65174f7..e5159887f7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.25.2 + ## 0.25.1 * `Coroutines`: diff --git a/gradle.properties b/gradle.properties index 0d5ea9a07d5..f987d5fa29b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.25.1 -android_code_version=291 +version=0.25.2 +android_code_version=292 From a4c6c367e39160431d22700bac0fc89d11b6477c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 12 Mar 2025 08:53:05 +0600 Subject: [PATCH 2/6] update exposed --- CHANGELOG.md | 3 +++ gradle/libs.versions.toml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5159887f7a..57c5ca1d573 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 0.25.2 +* `Versions`: + * `Exposed`: `0.59.0` -> `0.60.0` + ## 0.25.1 * `Coroutines`: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2135de11fce..e5cc8805cc4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ kt-coroutines = "1.10.1" kslog = "1.4.1" jb-compose = "1.7.3" -jb-exposed = "0.59.0" +jb-exposed = "0.60.0" jb-dokka = "2.0.0" sqlite = "3.49.1.0" From 831bf44e3412b609593e95c28f4af9f460a0abbe Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 14 Mar 2025 14:13:58 +0600 Subject: [PATCH 3/6] alsoInvalidate, alsoDoInvalidate, singleSuspend, factorySuspend --- CHANGELOG.md | 5 +++ .../coroutines/LaunchSynchronously.kt | 4 ++- koin/build.gradle | 2 +- koin/src/jvmMain/kotlin/FactorySuspend.kt | 32 +++++++++++++++++++ koin/src/jvmMain/kotlin/SingleSuspend.kt | 32 +++++++++++++++++++ .../inmo/micro_utils/repos/cache/CacheRepo.kt | 13 ++++++++ 6 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 koin/src/jvmMain/kotlin/FactorySuspend.kt create mode 100644 koin/src/jvmMain/kotlin/SingleSuspend.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 57c5ca1d573..a46b4923021 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ * `Versions`: * `Exposed`: `0.59.0` -> `0.60.0` +* `Repo`: + * `Cache`: + * Add extensions `alsoInvalidate` and `alsoDoInvalidate` +* `Koin`: + * Add extensions `singleSuspend` and `factorySuspend` for defining of dependencies with suspendable blocks ## 0.25.1 diff --git a/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt b/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt index 7e9bfe5a205..d5842a928c6 100644 --- a/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt +++ b/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt @@ -7,7 +7,9 @@ fun CoroutineScope.launchSynchronously(block: suspend CoroutineScope.() -> T val objectToSynchronize = Object() synchronized(objectToSynchronize) { launch(start = CoroutineStart.UNDISPATCHED) { - result = safelyWithResult(block) + result = runCatching { + block() + } }.invokeOnCompletion { synchronized(objectToSynchronize) { objectToSynchronize.notifyAll() diff --git a/koin/build.gradle b/koin/build.gradle index 466bf1b376f..7116800bfe3 100644 --- a/koin/build.gradle +++ b/koin/build.gradle @@ -16,7 +16,7 @@ kotlin { } jvmMain { dependencies { - api libs.kt.reflect + api project(":micro_utils.coroutines") } } androidMain { diff --git a/koin/src/jvmMain/kotlin/FactorySuspend.kt b/koin/src/jvmMain/kotlin/FactorySuspend.kt new file mode 100644 index 00000000000..17731956f47 --- /dev/null +++ b/koin/src/jvmMain/kotlin/FactorySuspend.kt @@ -0,0 +1,32 @@ +package dev.inmo.micro_utils.koin + +import dev.inmo.micro_utils.coroutines.doSynchronously +import kotlinx.coroutines.CoroutineScope +import org.koin.core.module.Module +import org.koin.core.parameter.ParametersHolder +import org.koin.core.qualifier.Qualifier +import org.koin.core.qualifier.StringQualifier +import org.koin.core.scope.Scope +import kotlin.reflect.KClass + +inline fun Module.factorySuspend( + qualifier: Qualifier? = null, + coroutineScope: CoroutineScope? = null, + noinline definition: suspend Scope.(ParametersHolder) -> T +) = factory( + qualifier, + if (coroutineScope == null) { + { + doSynchronously { + definition(it) + } + } + } else { + { + coroutineScope.doSynchronously { + definition(it) + } + } + } +) + diff --git a/koin/src/jvmMain/kotlin/SingleSuspend.kt b/koin/src/jvmMain/kotlin/SingleSuspend.kt new file mode 100644 index 00000000000..b43ea88cabc --- /dev/null +++ b/koin/src/jvmMain/kotlin/SingleSuspend.kt @@ -0,0 +1,32 @@ +package dev.inmo.micro_utils.koin + +import dev.inmo.micro_utils.coroutines.doSynchronously +import kotlinx.coroutines.CoroutineScope +import org.koin.core.module.Module +import org.koin.core.parameter.ParametersHolder +import org.koin.core.qualifier.StringQualifier +import org.koin.core.scope.Scope + +inline fun Module.singleSuspend( + qualifier: StringQualifier, + createdAtStart: Boolean = false, + coroutineScope: CoroutineScope? = null, + noinline definition: suspend Scope.(ParametersHolder) -> T +) = single( + qualifier, + createdAtStart, + if (coroutineScope == null) { + { + doSynchronously { + definition(it) + } + } + } else { + { + coroutineScope.doSynchronously { + definition(it) + } + } + } +) + diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt index 6d683617fb0..8286091002b 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt @@ -1,5 +1,8 @@ package dev.inmo.micro_utils.repos.cache +import dev.inmo.micro_utils.coroutines.launchLoggingDropExceptions +import kotlinx.coroutines.CoroutineScope + interface InvalidatableRepo { /** * Invalidates its internal data. It __may__ lead to autoreload of data. In case when repo makes autoreload, @@ -8,4 +11,14 @@ interface InvalidatableRepo { suspend fun invalidate() } +suspend fun T.alsoInvalidate() = also { + invalidate() +} + +fun T.alsoDoInvalidate(scope: CoroutineScope) = also { + scope.launchLoggingDropExceptions { + invalidate() + } +} + typealias CacheRepo = InvalidatableRepo From 6fb20fb9736532a24795237390e14349a74b0ece Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 14 Mar 2025 14:16:46 +0600 Subject: [PATCH 4/6] get back reflect in jvmMain of koin module --- koin/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/koin/build.gradle b/koin/build.gradle index 7116800bfe3..829d2ea11d7 100644 --- a/koin/build.gradle +++ b/koin/build.gradle @@ -16,12 +16,14 @@ kotlin { } jvmMain { dependencies { + api libs.kt.reflect api project(":micro_utils.coroutines") } } androidMain { dependencies { api libs.kt.reflect + api project(":micro_utils.coroutines") } } } From 178518db5ece59f19e687fb66ee8b2b4416f8ce8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 14 Mar 2025 15:01:22 +0600 Subject: [PATCH 5/6] alsoInvalidateSync, alsoInvalidateSyncLogging, alsoDoInvalidate -> alsoInvalidateAsync --- CHANGELOG.md | 2 +- .../coroutines/FlowSubscriptionAsync.kt | 2 +- .../inmo/micro_utils/repos/cache/CacheRepo.kt | 2 +- .../jvmMain/kotlin/InvalidateSynchronously.kt | 54 +++++++++++++++++++ .../src/jvmTest/kotlin/KtorCRUDRepoTests.kt | 4 +- .../jvmTest/kotlin/KtorKeyValueRepoTests.kt | 4 +- 6 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 repos/cache/src/jvmMain/kotlin/InvalidateSynchronously.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index a46b4923021..aea531e3d55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ * `Exposed`: `0.59.0` -> `0.60.0` * `Repo`: * `Cache`: - * Add extensions `alsoInvalidate` and `alsoDoInvalidate` + * Add extensions `alsoInvalidate`, `alsoInvalidateAsync`, `alsoInvalidateSync` and `alsoInvalidateSyncLogging` * `Koin`: * Add extensions `singleSuspend` and `factorySuspend` for defining of dependencies with suspendable blocks diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowSubscriptionAsync.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowSubscriptionAsync.kt index 667bba39c3f..3f46576e8dc 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowSubscriptionAsync.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/FlowSubscriptionAsync.kt @@ -71,7 +71,7 @@ fun Flow.subscribeAsync( it.invoke(markersMap) } - val job = subscribeSafelyWithoutExceptions(subscope) { data -> + val job = subscribeLoggingDropExceptions(subscope) { data -> val dataCommand = AsyncSubscriptionCommandData(data, subscope, markerFactory, block) { marker -> actor.send( AsyncSubscriptionCommandClearReceiver(marker) diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt index 8286091002b..bf709c4657a 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CacheRepo.kt @@ -15,7 +15,7 @@ suspend fun T.alsoInvalidate() = also { invalidate() } -fun T.alsoDoInvalidate(scope: CoroutineScope) = also { +fun T.alsoInvalidateAsync(scope: CoroutineScope) = also { scope.launchLoggingDropExceptions { invalidate() } diff --git a/repos/cache/src/jvmMain/kotlin/InvalidateSynchronously.kt b/repos/cache/src/jvmMain/kotlin/InvalidateSynchronously.kt new file mode 100644 index 00000000000..73fc94b7c5c --- /dev/null +++ b/repos/cache/src/jvmMain/kotlin/InvalidateSynchronously.kt @@ -0,0 +1,54 @@ +package dev.inmo.micro_utils.repos.cache + +import dev.inmo.kslog.common.KSLog +import dev.inmo.micro_utils.coroutines.doSynchronously +import dev.inmo.micro_utils.coroutines.runCatchingLogging +import kotlinx.coroutines.CoroutineScope + +fun T.alsoInvalidateSync( + scope: CoroutineScope, + onFailure: suspend (Throwable) -> Unit = {}, +) = also { + scope.doSynchronously { + runCatching { + invalidate() + }.onFailure { + onFailure(it) + } + } +} + +fun T.alsoInvalidateSync( + onFailure: suspend (Throwable) -> Unit = {}, +) = also { + doSynchronously { + runCatching { + invalidate() + }.onFailure { + onFailure(it) + } + } +} + +fun T.alsoInvalidateSyncLogging( + scope: CoroutineScope, + errorMessageBuilder: CoroutineScope.(Throwable) -> Any = { "Something web wrong" }, + logger: KSLog = KSLog, +) = also { + scope.doSynchronously { + runCatchingLogging(errorMessageBuilder, logger) { + invalidate() + } + } +} + +fun T.alsoInvalidateSyncLogging( + errorMessageBuilder: CoroutineScope.(Throwable) -> Any = { "Something web wrong" }, + logger: KSLog = KSLog, +) = also { + doSynchronously { + runCatchingLogging(errorMessageBuilder, logger) { + invalidate() + } + } +} diff --git a/repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt b/repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt index 0426e0e6aca..e94b0bcf8b0 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt @@ -73,7 +73,7 @@ class KtorCRUDRepoTests : CommonCRUDRepoTests() { } val server = io.ktor.server.engine.embeddedServer( CIO, - 34567, + 34568, "127.0.0.1" ) { install(ContentNegotiation) { @@ -100,7 +100,7 @@ class KtorCRUDRepoTests : CommonCRUDRepoTests() { } } val crudClient = KtorCRUDRepoClient( - "http://127.0.0.1:34567", + "http://127.0.0.1:34568", client, ContentType.Application.Json ) { diff --git a/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt b/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt index 781c15c764d..a2b336b7065 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt @@ -63,7 +63,7 @@ class KtorKeyValueRepoTests : CommonKeyValueRepoTests() { val repo = MapKeyValueRepo(map) val server = io.ktor.server.engine.embeddedServer( CIO, - 34567, + 34569, "127.0.0.1" ) { install(ContentNegotiation) { @@ -91,7 +91,7 @@ class KtorKeyValueRepoTests : CommonKeyValueRepoTests() { } } val crudClient = KtorKeyValueRepoClient( - "http://127.0.0.1:34567", + "http://127.0.0.1:34569", client, ContentType.Application.Json, Int.serializer(), From d69fee1732b227def5fb5ce41ba1339b035aeb02 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 14 Mar 2025 16:06:36 +0600 Subject: [PATCH 6/6] add @OverrideRequireManualInvalidation to all invalidates supposed to be called in init block --- .../OverrideRequireManualInvalidation.kt | 14 ++++++++++++++ .../inmo/micro_utils/repos/cache/CRUDCacheRepo.kt | 4 ++++ .../micro_utils/repos/cache/KeyValueCacheRepo.kt | 2 ++ .../micro_utils/repos/cache/KeyValuesCacheRepo.kt | 2 ++ .../cache/fallback/crud/AutoRecacheReadCRUDRepo.kt | 2 ++ .../fallback/crud/AutoRecacheWriteCRUDRepo.kt | 2 ++ .../keyvalue/AutoRecacheReadKeyValueRepo.kt | 2 ++ .../keyvalue/AutoRecacheWriteKeyValueRepo.kt | 2 ++ .../keyvalues/AutoRecacheReadKeyValuesRepo.kt | 2 ++ .../keyvalues/AutoRecacheWriteKeyValuesRepo.kt | 2 ++ .../repos/cache/full/FullCRUDCacheRepo.kt | 2 ++ .../repos/cache/full/FullKeyValueCacheRepo.kt | 3 +++ .../repos/cache/full/FullKeyValuesCacheRepo.kt | 3 +++ .../cache/full/direct/DirectFullCRUDCacheRepo.kt | 4 ++++ .../full/direct/DirectFullKeyValueCacheRepo.kt | 4 ++++ .../full/direct/DirectFullKeyValuesCacheRepo.kt | 4 ++++ 16 files changed, 54 insertions(+) create mode 100644 repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/annotations/OverrideRequireManualInvalidation.kt diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/annotations/OverrideRequireManualInvalidation.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/annotations/OverrideRequireManualInvalidation.kt new file mode 100644 index 00000000000..61b84cc6701 --- /dev/null +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/annotations/OverrideRequireManualInvalidation.kt @@ -0,0 +1,14 @@ +package dev.inmo.micro_utils.repos.annotations + + +@RequiresOptIn( + "Overriding of this invalidate message requires manual launching of invalidation on class initialization process", + RequiresOptIn.Level.WARNING +) +@Target( + AnnotationTarget.CONSTRUCTOR, + AnnotationTarget.FIELD, + AnnotationTarget.PROPERTY, + AnnotationTarget.FUNCTION, +) +annotation class OverrideRequireManualInvalidation \ No newline at end of file diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CRUDCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CRUDCacheRepo.kt index 372bff67823..86a1a9c612c 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CRUDCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/CRUDCacheRepo.kt @@ -4,6 +4,7 @@ import dev.inmo.micro_utils.coroutines.SmartRWLocker import dev.inmo.micro_utils.coroutines.withReadAcquire import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.cache.KVCache import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode import dev.inmo.micro_utils.repos.cache.util.actualizeAll @@ -39,6 +40,7 @@ open class ReadCRUDCacheRepo( kvCache.contains(id) } || parentRepo.contains(id) + @OverrideRequireManualInvalidation override suspend fun invalidate() = locker.withWriteLock { kvCache.clear() } @@ -117,6 +119,7 @@ open class WriteCRUDCacheRepo( return created } + @OverrideRequireManualInvalidation override suspend fun invalidate() = locker.withWriteLock { kvCache.clear() } @@ -150,6 +153,7 @@ WriteCRUDRepo by WriteCRUDCacheRepo( idGetter ), CRUDRepo { + @OverrideRequireManualInvalidation override suspend fun invalidate() = kvCache.actualizeAll(parentRepo, locker = locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValueCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValueCacheRepo.kt index 02148900f93..5feb23a91a5 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValueCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValueCacheRepo.kt @@ -5,6 +5,7 @@ import dev.inmo.micro_utils.coroutines.withReadAcquire import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.cache.KVCache import dev.inmo.micro_utils.repos.cache.util.actualizeAll import kotlinx.coroutines.CoroutineScope @@ -49,6 +50,7 @@ open class ReadKeyValueCacheRepo( } } + @OverrideRequireManualInvalidation override suspend fun invalidate() = kvCache.actualizeAll(parentRepo, locker = locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValuesCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValuesCacheRepo.kt index 98c064b9c4c..a27e874f677 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValuesCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/KeyValuesCacheRepo.kt @@ -6,6 +6,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.utils.* import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.cache.KVCache import dev.inmo.micro_utils.repos.cache.util.actualizeAll import kotlinx.coroutines.CoroutineScope @@ -48,6 +49,7 @@ open class ReadKeyValuesCacheRepo( kvCache.contains(k) } || parentRepo.contains(k) + @OverrideRequireManualInvalidation override suspend fun invalidate() = kvCache.actualizeAll(parentRepo, locker = locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheReadCRUDRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheReadCRUDRepo.kt index 84f5035ceae..30067239bc3 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheReadCRUDRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheReadCRUDRepo.kt @@ -6,6 +6,7 @@ import dev.inmo.micro_utils.pagination.PaginationResult import dev.inmo.micro_utils.repos.KeyValueRepo import dev.inmo.micro_utils.repos.MapKeyValueRepo import dev.inmo.micro_utils.repos.ReadCRUDRepo +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.fallback.ActionWrapper import dev.inmo.micro_utils.repos.cache.util.actualizeAll import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo @@ -90,6 +91,7 @@ open class AutoRecacheReadCRUDRepo( kvCache.set(idGetter(it), it) } ?: kvCache.get(id) + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheWriteCRUDRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheWriteCRUDRepo.kt index 762b98b5f12..58e335dc05f 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheWriteCRUDRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/crud/AutoRecacheWriteCRUDRepo.kt @@ -2,6 +2,7 @@ package dev.inmo.micro_utils.repos.cache.fallback.crud import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow @@ -53,6 +54,7 @@ open class AutoRecacheWriteCRUDRepo( kvCache.set(idGetter(it), it) } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.clear() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheReadKeyValueRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheReadKeyValueRepo.kt index e1aac600768..214a84e855c 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheReadKeyValueRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheReadKeyValueRepo.kt @@ -6,6 +6,7 @@ import dev.inmo.micro_utils.pagination.PaginationResult import dev.inmo.micro_utils.repos.KeyValueRepo import dev.inmo.micro_utils.repos.MapKeyValueRepo import dev.inmo.micro_utils.repos.ReadKeyValueRepo +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.fallback.ActionWrapper import dev.inmo.micro_utils.repos.cache.util.actualizeAll import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo @@ -100,6 +101,7 @@ open class AutoRecacheReadKeyValueRepo( originalRepo.keys(v, pagination, reversed) }.getOrElse { kvCache.keys(v, pagination, reversed) } + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheWriteKeyValueRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheWriteKeyValueRepo.kt index 0bea2516d57..3a498ceb244 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheWriteKeyValueRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalue/AutoRecacheWriteKeyValueRepo.kt @@ -2,6 +2,7 @@ package dev.inmo.micro_utils.repos.cache.fallback.keyvalue import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow @@ -44,6 +45,7 @@ open class AutoRecacheWriteKeyValueRepo( kvCache.set(toSet) } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.clear() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheReadKeyValuesRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheReadKeyValuesRepo.kt index c0795f27819..3ab5d114912 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheReadKeyValuesRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheReadKeyValuesRepo.kt @@ -13,6 +13,7 @@ import dev.inmo.micro_utils.pagination.utils.paginate import dev.inmo.micro_utils.repos.KeyValueRepo import dev.inmo.micro_utils.repos.MapKeyValueRepo import dev.inmo.micro_utils.repos.ReadKeyValuesRepo +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.fallback.ActionWrapper import dev.inmo.micro_utils.repos.cache.util.actualizeAll import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo @@ -140,6 +141,7 @@ open class AutoRecacheReadKeyValuesRepo( }) ?: (kvCache.get(k) ?.contains(v) == true) } + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheWriteKeyValuesRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheWriteKeyValuesRepo.kt index 14a4902c729..380b6255502 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheWriteKeyValuesRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/fallback/keyvalues/AutoRecacheWriteKeyValuesRepo.kt @@ -3,6 +3,7 @@ package dev.inmo.micro_utils.repos.cache.fallback.keyvalues import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions import dev.inmo.micro_utils.pagination.utils.doForAllWithNextPaging import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.FallbackCacheRepo import dev.inmo.micro_utils.repos.pagination.maxPagePagination import kotlinx.coroutines.CoroutineScope @@ -89,6 +90,7 @@ open class AutoRecacheWriteKeyValuesRepo( } } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.clear() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt index d30ede0d633..7172b8c5f5c 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.* import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode import dev.inmo.micro_utils.repos.cache.util.actualizeAll @@ -133,6 +134,7 @@ open class FullCRUDCacheRepo( locker.unlockWrite() } } + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt index 470430ae055..50fc5b77aec 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode import dev.inmo.micro_utils.repos.cache.util.actualizeAll import kotlinx.coroutines.CoroutineScope @@ -86,6 +87,7 @@ open class FullReadKeyValueCacheRepo( { if (it.results.isNotEmpty()) actualizeAll() } ) + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } @@ -160,6 +162,7 @@ open class FullKeyValueCacheRepo( locker.unlockWrite() } } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.actualizeAll(parentRepo, locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt index b4856684916..524afa732c8 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.utils.* import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode import dev.inmo.micro_utils.repos.cache.util.actualizeAll import dev.inmo.micro_utils.repos.pagination.maxPagePagination @@ -153,6 +154,7 @@ open class FullReadKeyValuesCacheRepo( { if (it.results.isNotEmpty()) actualizeAll() } ) + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } @@ -235,6 +237,7 @@ open class FullKeyValuesCacheRepo( locker.unlockWrite() } } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.actualizeAll(parentRepo, locker = locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullCRUDCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullCRUDCacheRepo.kt index d371d671f9d..29e536f1b60 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullCRUDCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullCRUDCacheRepo.kt @@ -1,11 +1,13 @@ package dev.inmo.micro_utils.repos.cache.full.direct +import dev.inmo.micro_utils.common.Warning import dev.inmo.micro_utils.coroutines.SmartRWLocker import dev.inmo.micro_utils.coroutines.launchLoggingDropExceptions import dev.inmo.micro_utils.coroutines.withReadAcquire import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.* import dev.inmo.micro_utils.repos.cache.util.actualizeAll import kotlinx.coroutines.CoroutineScope @@ -96,6 +98,8 @@ open class DirectFullCRUDCacheRepo( locker.unlockWrite() } } + + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValueCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValueCacheRepo.kt index 1da59594bf8..099d2b71d03 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValueCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValueCacheRepo.kt @@ -7,6 +7,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.Pagination import dev.inmo.micro_utils.pagination.PaginationResult import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.full.FullKeyValueCacheRepo import dev.inmo.micro_utils.repos.cache.full.FullReadKeyValueCacheRepo import dev.inmo.micro_utils.repos.cache.full.FullWriteKeyValueCacheRepo @@ -54,6 +55,7 @@ open class DirectFullReadKeyValueCacheRepo( kvCache.keys(v, pagination, reversed) } + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } @@ -86,6 +88,7 @@ open class DirectFullWriteKeyValueCacheRepo( } }.launchIn(scope) + @OverrideRequireManualInvalidation override suspend fun invalidate() { locker.withWriteLock { kvCache.clear() @@ -135,6 +138,7 @@ open class DirectFullKeyValueCacheRepo( locker.unlockWrite() } } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.actualizeAll(parentRepo, locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValuesCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValuesCacheRepo.kt index a70543c7dc0..c4d3d827446 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValuesCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/direct/DirectFullKeyValuesCacheRepo.kt @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.utils.* import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.annotations.OverrideRequireManualInvalidation import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode import dev.inmo.micro_utils.repos.cache.util.actualizeAll import kotlinx.coroutines.CoroutineScope @@ -88,6 +89,7 @@ open class DirectFullReadKeyValuesCacheRepo( return result ?: emptyPaginationResult() } + @OverrideRequireManualInvalidation override suspend fun invalidate() { actualizeAll() } @@ -121,6 +123,7 @@ open class DirectFullWriteKeyValuesCacheRepo( } }.launchIn(scope) + @OverrideRequireManualInvalidation override suspend fun invalidate() { locker.withWriteLock { kvCache.clear() @@ -170,6 +173,7 @@ open class DirectFullKeyValuesCacheRepo( locker.unlockWrite() } } + @OverrideRequireManualInvalidation override suspend fun invalidate() { kvCache.actualizeAll(parentRepo, locker = locker) }