commonMain.dev.inmo.micro_utils.repos.StandartCRUDRepo.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of micro_utils.repos.common Show documentation
Show all versions of micro_utils.repos.common Show documentation
It is set of projects with micro tools for avoiding of routines coding
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 : Repo {
suspend fun getByPagination(pagination: Pagination): PaginationResult
suspend fun getIdsByPagination(pagination: Pagination): PaginationResult
suspend fun getById(id: IdType): ObjectType?
suspend fun contains(id: IdType): Boolean
suspend fun getAll(): Map = getAllWithCurrentPaging(maxPagePagination()) {
getIdsByPagination(it).let {
it.changeResultsUnchecked(
it.results.mapNotNull { it to (getById(it) ?: return@mapNotNull null) }
)
}
}.toMap()
suspend fun count(): Long
}
typealias ReadStandardCRUDRepo = ReadCRUDRepo
typealias UpdatedValuePair = Pair
val UpdatedValuePair.id
get() = first
val UpdatedValuePair<*, ValueType>.value
get() = second
interface WriteCRUDRepo : Repo {
val newObjectsFlow: Flow
val updatedObjectsFlow: Flow
val deletedObjectsIdsFlow: Flow
suspend fun create(values: List): List
suspend fun update(id: IdType, value: InputValueType): ObjectType?
suspend fun update(values: List>): List
suspend fun deleteById(ids: List)
}
typealias WriteStandardCRUDRepo = WriteCRUDRepo
/**
* Just mirroring [WriteCRUDRepo.newObjectsFlow] to be same as in KV repos
*/
val WriteCRUDRepo.onNewObjects: Flow
get() = newObjectsFlow
/**
* Just mirroring [WriteCRUDRepo.updatedObjectsFlow] to be same as in KV repos
*/
val WriteCRUDRepo.onUpdatedObjects: Flow
get() = updatedObjectsFlow
/**
* Just mirroring [WriteCRUDRepo.deletedObjectsIdsFlow] to be same as in KV repos
*/
val WriteCRUDRepo<*, IdType, *>.onDeletedObjectsIds: Flow
get() = deletedObjectsIdsFlow
suspend fun WriteCRUDRepo.create(
vararg values: InputValueType
): List = create(values.toList())
suspend fun WriteCRUDRepo.update(
vararg values: UpdatedValuePair
): List = update(values.toList())
suspend fun WriteCRUDRepo.deleteById(
vararg ids: IdType
) = deleteById(ids.toList())
interface CRUDRepo : ReadCRUDRepo,
WriteCRUDRepo
typealias StandardCRUDRepo = CRUDRepo
class DelegateBasedCRUDRepo(
readDelegate: ReadCRUDRepo,
writeDelegate: WriteCRUDRepo
) : CRUDRepo,
ReadCRUDRepo by readDelegate,
WriteCRUDRepo by writeDelegate
© 2015 - 2025 Weber Informatics LLC | Privacy Policy