mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-11-04 06:00:22 +00:00 
			
		
		
		
	add extension actualizeAll
This commit is contained in:
		@@ -8,6 +8,7 @@ import dev.inmo.micro_utils.repos.*
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.*
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.cache.FullKVCache
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.cache.KVCache
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
 | 
			
		||||
@@ -32,12 +33,7 @@ open class FullReadCRUDCacheRepo<ObjectType, IdType>(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected open suspend fun actualizeAll() {
 | 
			
		||||
        kvCache.clear()
 | 
			
		||||
        doForAllWithNextPaging {
 | 
			
		||||
            parentRepo.getByPagination(it).also {
 | 
			
		||||
                kvCache.set(it.results.associateBy { idGetter(it) })
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        kvCache.actualizeAll(parentRepo)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getByPagination(pagination: Pagination): PaginationResult<ObjectType> = doOrTakeAndActualize(
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ 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.cache.cache.FullKVCache
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
 | 
			
		||||
import dev.inmo.micro_utils.repos.pagination.getAll
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
@@ -97,7 +98,7 @@ fun <Key, Value> WriteKeyValueRepo<Key, Value>.caching(
 | 
			
		||||
) = FullWriteKeyValueCacheRepo(this, kvCache, scope)
 | 
			
		||||
 | 
			
		||||
open class FullKeyValueCacheRepo<Key,Value>(
 | 
			
		||||
    parentRepo: KeyValueRepo<Key, Value>,
 | 
			
		||||
    override val parentRepo: KeyValueRepo<Key, Value>,
 | 
			
		||||
    kvCache: FullKVCache<Key, Value>,
 | 
			
		||||
    scope: CoroutineScope = CoroutineScope(Dispatchers.Default)
 | 
			
		||||
) : FullWriteKeyValueCacheRepo<Key,Value>(parentRepo, kvCache, scope),
 | 
			
		||||
@@ -106,7 +107,7 @@ open class FullKeyValueCacheRepo<Key,Value>(
 | 
			
		||||
    override suspend fun unsetWithValues(toUnset: List<Value>) = parentRepo.unsetWithValues(toUnset)
 | 
			
		||||
 | 
			
		||||
    override suspend fun invalidate() {
 | 
			
		||||
        super<ReadKeyValueRepo>.invalidate()
 | 
			
		||||
        kvCache.actualizeAll(parentRepo)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ 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.FullKVCache
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.util.actualizeAll
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.flow.*
 | 
			
		||||
@@ -33,8 +34,7 @@ open class FullReadKeyValuesCacheRepo<Key,Value>(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected open suspend fun actualizeAll() {
 | 
			
		||||
        doAllWithCurrentPaging { kvCache.keys(it).also { kvCache.unset(it.results) } }
 | 
			
		||||
        kvCache.set(parentRepo.getAll())
 | 
			
		||||
        kvCache.actualizeAll(parentRepo)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun get(k: Key, pagination: Pagination, reversed: Boolean): PaginationResult<Value> {
 | 
			
		||||
@@ -140,7 +140,7 @@ fun <Key, Value> WriteKeyValuesRepo<Key, Value>.caching(
 | 
			
		||||
) = FullWriteKeyValuesCacheRepo(this, kvCache, scope)
 | 
			
		||||
 | 
			
		||||
open class FullKeyValuesCacheRepo<Key,Value>(
 | 
			
		||||
    parentRepo: KeyValuesRepo<Key, Value>,
 | 
			
		||||
    override val parentRepo: KeyValuesRepo<Key, Value>,
 | 
			
		||||
    kvCache: FullKVCache<Key, List<Value>>,
 | 
			
		||||
    scope: CoroutineScope = CoroutineScope(Dispatchers.Default)
 | 
			
		||||
) : FullWriteKeyValuesCacheRepo<Key, Value>(parentRepo, kvCache, scope),
 | 
			
		||||
@@ -155,7 +155,7 @@ open class FullKeyValuesCacheRepo<Key,Value>(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun invalidate() {
 | 
			
		||||
        super<ReadKeyValuesRepo>.invalidate()
 | 
			
		||||
        kvCache.actualizeAll(parentRepo)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/util/ActualizeAll.kt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/util/ActualizeAll.kt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
package dev.inmo.micro_utils.repos.cache.util
 | 
			
		||||
 | 
			
		||||
import dev.inmo.micro_utils.pagination.FirstPagePagination
 | 
			
		||||
import dev.inmo.micro_utils.pagination.utils.doForAllWithNextPaging
 | 
			
		||||
import dev.inmo.micro_utils.repos.ReadCRUDRepo
 | 
			
		||||
import dev.inmo.micro_utils.repos.ReadKeyValueRepo
 | 
			
		||||
import dev.inmo.micro_utils.repos.ReadKeyValuesRepo
 | 
			
		||||
import dev.inmo.micro_utils.repos.cache.cache.KVCache
 | 
			
		||||
import dev.inmo.micro_utils.repos.set
 | 
			
		||||
 | 
			
		||||
suspend inline fun <K, V> KVCache<K, V>.actualizeAll(
 | 
			
		||||
    getAll: () -> Map<K, V>
 | 
			
		||||
) {
 | 
			
		||||
    clear()
 | 
			
		||||
    set(getAll())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
suspend inline fun <K, V> KVCache<K, V>.actualizeAll(
 | 
			
		||||
    repo: ReadKeyValueRepo<K, V>
 | 
			
		||||
) {
 | 
			
		||||
    clear()
 | 
			
		||||
    val count = repo.count().takeIf { it < Int.MAX_VALUE } ?.toInt() ?: Int.MAX_VALUE
 | 
			
		||||
    val initPagination = FirstPagePagination(count)
 | 
			
		||||
    doForAllWithNextPaging(initPagination) {
 | 
			
		||||
        keys(it).also {
 | 
			
		||||
            set(
 | 
			
		||||
                it.results.mapNotNull { k -> repo.get(k) ?.let { k to it } }
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
suspend inline fun <K, V> KVCache<K, List<V>>.actualizeAll(
 | 
			
		||||
    repo: ReadKeyValuesRepo<K, V>
 | 
			
		||||
) {
 | 
			
		||||
    clear()
 | 
			
		||||
    val count = repo.count().takeIf { it < Int.MAX_VALUE } ?.toInt() ?: Int.MAX_VALUE
 | 
			
		||||
    val initPagination = FirstPagePagination(count)
 | 
			
		||||
    doForAllWithNextPaging(initPagination) {
 | 
			
		||||
        keys(it).also {
 | 
			
		||||
            set(
 | 
			
		||||
                it.results.associateWith { k -> repo.getAll(k) }
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
suspend inline fun <K, V> KVCache<K, V>.actualizeAll(
 | 
			
		||||
    repo: ReadCRUDRepo<V, K>
 | 
			
		||||
) {
 | 
			
		||||
    clear()
 | 
			
		||||
    val count = repo.count().takeIf { it < Int.MAX_VALUE } ?.toInt() ?: Int.MAX_VALUE
 | 
			
		||||
    val initPagination = FirstPagePagination(count)
 | 
			
		||||
    doForAllWithNextPaging(initPagination) {
 | 
			
		||||
        keys(it).also {
 | 
			
		||||
            set(
 | 
			
		||||
                it.results.mapNotNull { k -> repo.getById(k) ?.let { k to it } }
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -93,6 +93,10 @@ suspend inline fun <Key, Value> WriteKeyValueRepo<Key, Value>.set(
 | 
			
		||||
    vararg toSet: Pair<Key, Value>
 | 
			
		||||
) = set(toSet.toMap())
 | 
			
		||||
 | 
			
		||||
suspend inline fun <Key, Value> WriteKeyValueRepo<Key, Value>.set(
 | 
			
		||||
    toSet: List<Pair<Key, Value>>
 | 
			
		||||
) = set(toSet.toMap())
 | 
			
		||||
 | 
			
		||||
suspend inline fun <Key, Value> WriteKeyValueRepo<Key, Value>.set(
 | 
			
		||||
    k: Key, v: Value
 | 
			
		||||
) = set(k to v)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user