diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eba7d2512f..8aa3ee03430 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.12.9 + +* `Repos`: + * `Cache`: + * Fixes in key values cache + ## 0.12.8 * `Versions`: diff --git a/gradle.properties b/gradle.properties index b3d2f587601..3a14162a6e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,5 +14,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.12.8 -android_code_version=147 +version=0.12.9 +android_code_version=148 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8049c684f04..ae04661ee73 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists 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 716463b76c9..346454e0572 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 @@ -1,9 +1,7 @@ package dev.inmo.micro_utils.repos.cache -import dev.inmo.micro_utils.pagination.Pagination -import dev.inmo.micro_utils.pagination.PaginationResult -import dev.inmo.micro_utils.pagination.utils.paginate -import dev.inmo.micro_utils.pagination.utils.reverse +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.cache.cache.KVCache import kotlinx.coroutines.CoroutineScope @@ -15,18 +13,24 @@ open class ReadKeyValuesCacheRepo( protected open val kvCache: KVCache> ) : ReadKeyValuesRepo by parentRepo, CacheRepo { override suspend fun get(k: Key, pagination: Pagination, reversed: Boolean): PaginationResult { - return kvCache.get(k) ?.paginate( - pagination.let { if (reversed) it.reverse(count(k)) else it } - ) ?.let { - if (reversed) it.copy(results = it.results.reversed()) else it - } ?: parentRepo.get(k, pagination, reversed) + val count = count(k) + return getAll(k, reversed).createPaginationResult( + pagination, + count + ) } override suspend fun getAll(k: Key, reversed: Boolean): List { return kvCache.get(k) ?.let { if (reversed) it.reversed() else it - } ?: parentRepo.getAll(k, reversed) + } ?: parentRepo.getAll(k, reversed).also { + kvCache.set(k, it) + } } - override suspend fun contains(k: Key, v: Value): Boolean = kvCache.get(k) ?.contains(v) ?: parentRepo.contains(k, v) + override suspend fun contains(k: Key, v: Value): Boolean = kvCache.get(k) ?.contains(v) ?: (parentRepo.contains(k, v).also { + if (it) { + kvCache.unset(k) // clear as invalid + } + }) override suspend fun contains(k: Key): Boolean = kvCache.contains(k) || parentRepo.contains(k) } @@ -39,9 +43,21 @@ open class KeyValuesCacheRepo( kvCache: KVCache>, scope: CoroutineScope = CoroutineScope(Dispatchers.Default) ) : ReadKeyValuesCacheRepo(parentRepo, kvCache), KeyValuesRepo, WriteKeyValuesRepo by parentRepo, CacheRepo { - protected val onNewJob = parentRepo.onNewValue.onEach { kvCache.set(it.first, kvCache.get(it.first) ?.plus(it.second) ?: listOf(it.second)) }.launchIn(scope) - protected val onRemoveJob = parentRepo.onValueRemoved.onEach { kvCache.set(it.first, kvCache.get(it.first) ?.minus(it.second) ?: return@onEach) }.launchIn(scope) - protected val onDataClearedJob = parentRepo.onDataCleared.onEach { kvCache.unset(it) }.launchIn(scope) + protected val onNewJob = parentRepo.onNewValue.onEach { (k, v) -> + kvCache.set( + k, + kvCache.get(k) ?.plus(v) ?: return@onEach + ) + }.launchIn(scope) + protected val onRemoveJob = parentRepo.onValueRemoved.onEach { (k, v) -> + kvCache.set( + k, + kvCache.get(k) ?.minus(v) ?: return@onEach + ) + }.launchIn(scope) + protected val onDataClearedJob = parentRepo.onDataCleared.onEach { + kvCache.unset(it) + }.launchIn(scope) } fun KeyValuesRepo.cached(