From 4b0f20dbd1910423e438647e88953952e808c72d Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 15 Feb 2024 15:36:32 +0600 Subject: [PATCH] improve default 'set' of KeyValuesRepo --- CHANGELOG.md | 4 ++++ .../kotlin/dev/inmo/micro_utils/repos/KeyValuesRepo.kt | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80d1dd1fbcf..e22adc6e720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 0.20.34 +* `Repos`: + * `Common`: + * Improve default `set` realization of `KeyValuesRepo` + ## 0.20.33 * `Colors` diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/KeyValuesRepo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/KeyValuesRepo.kt index 57e8a6331c9..670d23ff5b5 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/KeyValuesRepo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/KeyValuesRepo.kt @@ -1,5 +1,6 @@ package dev.inmo.micro_utils.repos +import dev.inmo.micro_utils.common.diff import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.utils.doForAllWithNextPaging import dev.inmo.micro_utils.pagination.utils.getAllWithNextPaging @@ -130,6 +131,14 @@ interface KeyValuesRepo : ReadKeyValuesRepo, WriteKeyVal remove(toRemove) } + + override suspend fun set(toSet: Map>) { + toSet.forEach { (k, v) -> + val diff = getAll(k).diff(v) + remove(k, diff.removed.map { it.value }) + add(k, diff.added.map { it.value }) + } + } } typealias OneToManyKeyValueRepo = KeyValuesRepo