mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-11-14 11:00:26 +00:00
getAll
This commit is contained in:
@@ -2,8 +2,10 @@ package dev.inmo.micro_utils.repos
|
||||
|
||||
import dev.inmo.micro_utils.pagination.*
|
||||
import dev.inmo.micro_utils.pagination.utils.doAllWithCurrentPaging
|
||||
import dev.inmo.micro_utils.pagination.utils.getAllByWithNextPaging
|
||||
import dev.inmo.micro_utils.pagination.utils.getAllWithNextPaging
|
||||
import dev.inmo.micro_utils.pagination.utils.paginate
|
||||
import dev.inmo.micro_utils.repos.pagination.maxPagePagination
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
@@ -51,6 +53,16 @@ interface ReadKeyValueRepo<Key, Value> : Repo {
|
||||
*/
|
||||
suspend fun contains(key: Key): Boolean
|
||||
|
||||
suspend fun getAll(): Map<Key, Value> = getAllByWithNextPaging(maxPagePagination()) {
|
||||
keys(it).let {
|
||||
it.changeResultsUnchecked(
|
||||
it.results.mapNotNull {
|
||||
it to (get(it) ?: return@mapNotNull null)
|
||||
}
|
||||
)
|
||||
}
|
||||
}.toMap()
|
||||
|
||||
/**
|
||||
* @return count of all collection objects
|
||||
*/
|
||||
|
||||
@@ -2,6 +2,9 @@ package dev.inmo.micro_utils.repos
|
||||
|
||||
import dev.inmo.micro_utils.pagination.Pagination
|
||||
import dev.inmo.micro_utils.pagination.PaginationResult
|
||||
import dev.inmo.micro_utils.pagination.changeResultsUnchecked
|
||||
import dev.inmo.micro_utils.pagination.utils.getAllWithCurrentPaging
|
||||
import dev.inmo.micro_utils.repos.pagination.maxPagePagination
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface ReadCRUDRepo<ObjectType, IdType> : Repo {
|
||||
@@ -9,6 +12,14 @@ interface ReadCRUDRepo<ObjectType, IdType> : Repo {
|
||||
suspend fun getIdsByPagination(pagination: Pagination): PaginationResult<IdType>
|
||||
suspend fun getById(id: IdType): ObjectType?
|
||||
suspend fun contains(id: IdType): Boolean
|
||||
suspend fun getAll(): Map<IdType, ObjectType> = getAllWithCurrentPaging(maxPagePagination()) {
|
||||
getIdsByPagination(it).let {
|
||||
it.changeResultsUnchecked(
|
||||
it.results.mapNotNull { it to (getById(it) ?: return@mapNotNull null) }
|
||||
)
|
||||
}
|
||||
}.toMap()
|
||||
|
||||
suspend fun count(): Long
|
||||
}
|
||||
typealias ReadStandardCRUDRepo<ObjectType, IdType> = ReadCRUDRepo<ObjectType, IdType>
|
||||
|
||||
@@ -32,6 +32,10 @@ open class MapperReadCRUDRepo<FromId, FromRegistered, ToId, ToRegistered>(
|
||||
|
||||
override suspend fun contains(id: FromId): Boolean = to.contains(id.toOutKey())
|
||||
|
||||
override suspend fun getAll(): Map<FromId, FromRegistered> = to.getAll().asSequence().associate { (k, v) ->
|
||||
k.toInnerKey() to v.toInnerValue()
|
||||
}
|
||||
|
||||
override suspend fun getById(id: FromId): FromRegistered? = to.getById(
|
||||
id.toOutKey()
|
||||
) ?.toInnerValue()
|
||||
|
||||
@@ -55,6 +55,10 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
|
||||
key.toOutKey()
|
||||
)
|
||||
|
||||
override suspend fun getAll(): Map<FromKey, FromValue> = to.getAll().map { (k, v) ->
|
||||
k.toInnerKey() to v.toInnerValue()
|
||||
}.toMap()
|
||||
|
||||
override suspend fun count(): Long = to.count()
|
||||
}
|
||||
|
||||
|
||||
@@ -16,4 +16,4 @@ suspend inline fun <T, ID, REPO : ReadCRUDRepo<T, ID>> REPO.getAll(
|
||||
suspend inline fun <T, ID, REPO : ReadCRUDRepo<T, ID>> REPO.getAll(
|
||||
@Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE")
|
||||
crossinline methodCaller: suspend REPO.(Pagination) -> PaginationResult<T>
|
||||
): List<T> = getAll(FirstPagePagination(count().toCoercedInt()), methodCaller)
|
||||
): List<T> = getAll(maxPagePagination(), methodCaller)
|
||||
|
||||
@@ -19,4 +19,4 @@ suspend inline fun <Key, Value, REPO : ReadKeyValueRepo<Key, Value>> REPO.getAll
|
||||
suspend inline fun <Key, Value, REPO : ReadKeyValueRepo<Key, Value>> REPO.getAll(
|
||||
@Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE")
|
||||
crossinline methodCaller: suspend REPO.(Pagination) -> PaginationResult<Key>
|
||||
): List<Pair<Key, Value>> = getAll(FirstPagePagination(count().toCoercedInt()), methodCaller)
|
||||
): List<Pair<Key, Value>> = getAll(maxPagePagination(), methodCaller)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package dev.inmo.micro_utils.repos.pagination
|
||||
|
||||
import dev.inmo.micro_utils.common.toCoercedInt
|
||||
import dev.inmo.micro_utils.pagination.FirstPagePagination
|
||||
import dev.inmo.micro_utils.repos.ReadCRUDRepo
|
||||
import dev.inmo.micro_utils.repos.ReadKeyValueRepo
|
||||
import dev.inmo.micro_utils.repos.ReadKeyValuesRepo
|
||||
|
||||
suspend inline fun ReadCRUDRepo<*, *>.maxPagePagination() = FirstPagePagination(count().toCoercedInt())
|
||||
suspend inline fun ReadKeyValueRepo<*, *>.maxPagePagination() = FirstPagePagination(count().toCoercedInt())
|
||||
suspend inline fun ReadKeyValuesRepo<*, *>.maxPagePagination() = FirstPagePagination(count().toCoercedInt())
|
||||
@@ -21,4 +21,4 @@ suspend inline fun <Key, Value, REPO : ReadKeyValuesRepo<Key, Value>> REPO.getAl
|
||||
suspend inline fun <Key, Value, REPO : ReadKeyValuesRepo<Key, Value>> REPO.getAll(
|
||||
@Suppress("REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE")
|
||||
crossinline methodCaller: suspend REPO.(Pagination) -> PaginationResult<Key>
|
||||
): List<Pair<Key, List<Value>>> = getAll(FirstPagePagination(count().toCoercedInt()), methodCaller)
|
||||
): List<Pair<Key, List<Value>>> = getAll(maxPagePagination(), methodCaller)
|
||||
|
||||
@@ -12,6 +12,8 @@ open class ReadCRUDFromKeyValueRepo<RegisteredType, IdType>(
|
||||
|
||||
override suspend fun count(): Long = original.count()
|
||||
|
||||
override suspend fun getAll(): Map<IdType, RegisteredType> = original.getAll()
|
||||
|
||||
override suspend fun getByPagination(pagination: Pagination): PaginationResult<RegisteredType> = original.values(pagination)
|
||||
|
||||
override suspend fun getIdsByPagination(pagination: Pagination): PaginationResult<IdType> = original.keys(pagination)
|
||||
|
||||
@@ -11,6 +11,7 @@ import dev.inmo.micro_utils.pagination.utils.paginate
|
||||
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.pagination.getAll
|
||||
import dev.inmo.micro_utils.repos.transforms.kvs.ReadKeyValuesFromKeyValueRepo
|
||||
import kotlin.jvm.JvmInline
|
||||
|
||||
@@ -40,6 +41,8 @@ value class ReadKeyValueFromCRUDRepo<Key, Value>(
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getAll(): Map<Key, Value> = original.getAll()
|
||||
|
||||
override suspend fun count(): Long = original.count()
|
||||
|
||||
override suspend fun contains(key: Key): Boolean = original.contains(key)
|
||||
|
||||
@@ -41,6 +41,8 @@ open class ReadKeyValueFromKeyValuesRepo<Key, Value>(
|
||||
return original.contains(key)
|
||||
}
|
||||
|
||||
override suspend fun getAll(): Map<Key, List<Value>> = original.getAll()
|
||||
|
||||
override suspend fun keys(v: List<Value>, pagination: Pagination, reversed: Boolean): PaginationResult<Key> {
|
||||
val keys = mutableSetOf<Key>()
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.inmo.micro_utils.repos
|
||||
|
||||
import dev.inmo.micro_utils.common.Warning
|
||||
import dev.inmo.micro_utils.common.filename
|
||||
import dev.inmo.micro_utils.pagination.*
|
||||
import dev.inmo.micro_utils.pagination.utils.reverse
|
||||
import kotlinx.coroutines.*
|
||||
@@ -94,6 +95,8 @@ class FileReadKeyValueRepo(
|
||||
return File(folder, key).exists()
|
||||
}
|
||||
|
||||
override suspend fun getAll(): Map<String, File> = (folder.listFiles() ?.toList() ?: emptyList()).associateBy { it.filename.name }
|
||||
|
||||
override suspend fun count(): Long = folder.list() ?.size ?.toLong() ?: 0L
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,18 @@ abstract class AbstractAndroidCRUDRepo<ObjectType, IdType>(
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getAll(): Map<IdType, ObjectType> = helper.readableTransaction {
|
||||
select(
|
||||
tableName,
|
||||
null,
|
||||
""
|
||||
).use {
|
||||
it.map {
|
||||
it.toId() to it.toObject()
|
||||
}
|
||||
}
|
||||
}.toMap()
|
||||
|
||||
override suspend fun getById(id: IdType): ObjectType? = helper.readableTransaction {
|
||||
select(
|
||||
tableName,
|
||||
|
||||
@@ -104,6 +104,15 @@ class KeyValueStore<T : Any> internal constructor (
|
||||
|
||||
override suspend fun contains(key: String): Boolean = sharedPreferences.contains(key)
|
||||
|
||||
override suspend fun getAll(): Map<String, T> {
|
||||
val resultMap = mutableMapOf<String, T>()
|
||||
sharedPreferences.all.forEach { (k, v) ->
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
resultMap[k] = (v as? T) ?: return@forEach
|
||||
}
|
||||
return resultMap.toMap()
|
||||
}
|
||||
|
||||
override suspend fun count(): Long = sharedPreferences.all.size.toLong()
|
||||
|
||||
override suspend fun set(toSet: Map<String, T>) {
|
||||
|
||||
Reference in New Issue
Block a user