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 14c3ed29800..de4a0a14acd 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 @@ -16,7 +16,7 @@ import kotlinx.coroutines.launch import kotlin.time.Duration.Companion.seconds open class AutoRecacheReadCRUDRepo( - protected val originalRepo: ReadCRUDRepo, + protected open val originalRepo: ReadCRUDRepo, protected val scope: CoroutineScope, protected val kvCache: FullKVCache = FullKVCache(), protected val recacheDelay: Long = 60.seconds.inWholeMilliseconds, @@ -25,9 +25,7 @@ open class AutoRecacheReadCRUDRepo( ) : ReadCRUDRepo, FallbackCacheRepo { val autoUpdateJob = scope.launch { while (isActive) { - runCatchingSafely { - kvCache.actualizeAll(originalRepo) - } + actualizeAll() delay(recacheDelay) } @@ -42,6 +40,12 @@ open class AutoRecacheReadCRUDRepo( idGetter: (RegisteredObject) -> Id ) : this(originalRepo, scope, kvCache, recacheDelay, ActionWrapper.Timeouted(originalCallTimeoutMillis), idGetter) + protected suspend fun actualizeAll(): Result { + return runCatchingSafely { + kvCache.actualizeAll(originalRepo) + } + } + override suspend fun contains(id: Id): Boolean = actionWrapper.wrap { originalRepo.contains(id) }.getOrElse { @@ -75,4 +79,8 @@ open class AutoRecacheReadCRUDRepo( }.getOrNull() ?.also { kvCache.set(idGetter(it), it) } ?: kvCache.get(id) + + 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 9a044ab254d..ca15411096e 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 @@ -58,4 +58,8 @@ open class AutoRecacheWriteCRUDRepo( override suspend fun create(values: List): List = originalRepo.create(values).onEach { kvCache.set(idGetter(it), it) } + + 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 3eb121589de..0bc040bef7b 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 @@ -25,9 +25,7 @@ open class AutoRecacheReadKeyValueRepo( ) : ReadKeyValueRepo, FallbackCacheRepo { val autoUpdateJob = scope.launch { while (isActive) { - runCatchingSafely { - kvCache.actualizeAll(originalRepo) - } + actualizeAll() delay(recacheDelay) } @@ -42,6 +40,12 @@ open class AutoRecacheReadKeyValueRepo( idGetter: (RegisteredObject) -> Id ) : this(originalRepo, scope, kvCache, recacheDelay, ActionWrapper.Timeouted(originalCallTimeoutMillis), idGetter) + protected suspend fun actualizeAll(): Result { + return runCatchingSafely { + kvCache.actualizeAll(originalRepo) + } + } + override suspend fun contains(key: Id): Boolean = actionWrapper.wrap { originalRepo.contains(key) }.getOrElse { @@ -85,4 +89,8 @@ open class AutoRecacheReadKeyValueRepo( ): PaginationResult = actionWrapper.wrap { originalRepo.keys(v, pagination, reversed) }.getOrElse { kvCache.keys(v, pagination, reversed) } + + 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 fef2e946046..8a725629b36 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 @@ -47,4 +47,8 @@ open class AutoRecacheWriteKeyValueRepo( ).also { kvCache.set(toSet) } + + 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 c160f61c320..252e20872a7 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 @@ -32,9 +32,7 @@ open class AutoRecacheReadKeyValuesRepo( ) : ReadKeyValuesRepo, FallbackCacheRepo { val autoUpdateJob = scope.launch { while (isActive) { - runCatchingSafely { - kvCache.actualizeAll(originalRepo) - } + actualizeAll() delay(recacheDelay) } @@ -49,6 +47,12 @@ open class AutoRecacheReadKeyValuesRepo( idGetter: (RegisteredObject) -> Id ) : this(originalRepo, scope, kvCache, recacheDelay, ActionWrapper.Timeouted(originalCallTimeoutMillis), idGetter) + protected suspend fun actualizeAll(): Result { + return runCatchingSafely { + kvCache.actualizeAll(originalRepo) + } + } + override suspend fun contains(k: Id): Boolean = actionWrapper.wrap { originalRepo.contains(k) }.getOrElse { @@ -136,4 +140,8 @@ open class AutoRecacheReadKeyValuesRepo( kvCache.set(k, ((kvCache.get(k) ?: return@also) + v).distinct()) }) ?: (kvCache.get(k) ?.contains(v) == true) } + + 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 9516a16bf8f..73cf0551472 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 @@ -79,4 +79,8 @@ open class AutoRecacheWriteKeyValuesRepo( kvCache.set(k, (kvCache.get(k) ?: return@forEach) + v) } } + + override suspend fun invalidate() { + kvCache.clear() + } }