FullCRUDCacheRepo

open class FullCRUDCacheRepo<ObjectType, IdType, InputValueType>(crudRepo: CRUDRepo<ObjectType, IdType, InputValueType>, kvCache: KeyValueRepo<IdType, ObjectType>, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, locker: SmartRWLocker = SmartRWLocker(writeIsLocked = !skipStartInvalidate), idGetter: (ObjectType) -> IdType) : FullReadCRUDCacheRepo<ObjectType, IdType> , WriteCRUDRepo<ObjectType, IdType, InputValueType> , CRUDRepo<ObjectType, IdType, InputValueType> (source)

Constructors

Link copied to clipboard
constructor(crudRepo: CRUDRepo<ObjectType, IdType, InputValueType>, kvCache: KeyValueRepo<IdType, ObjectType>, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, locker: SmartRWLocker = SmartRWLocker(writeIsLocked = !skipStartInvalidate), idGetter: (ObjectType) -> IdType)

Properties

Link copied to clipboard
open override val deletedObjectsIdsFlow: Flow<IdType>

Flow that emits the ID of each deleted object after a successful deleteById call.

Link copied to clipboard
open override val newObjectsFlow: Flow<ObjectType>

Flow that emits each newly created object after a successful create call.

Link copied to clipboard

Mirrors WriteCRUDRepo.deletedObjectsIdsFlow under the name onDeletedObjectsIds for consistency with KV repos naming.

Link copied to clipboard

Mirrors WriteCRUDRepo.newObjectsFlow under the name onNewObjects for consistency with KV repos naming.

Link copied to clipboard

Mirrors WriteCRUDRepo.updatedObjectsFlow under the name onUpdatedObjects for consistency with KV repos naming.

Link copied to clipboard
open override val updatedObjectsFlow: Flow<ObjectType>

Flow that emits each updated object after a successful update call.

Functions

Link copied to clipboard

Wraps this ReadCRUDRepo as a ReadKeyValueFromCRUDRepo, exposing CRUD IDs as keys and CRUD objects as values in a ReadKeyValueRepo.

Link copied to clipboard
Link copied to clipboard
fun <ObjectType, IdType, InputType> WriteCRUDRepo<ObjectType, IdType, InputType>.caching(kvCache: KVCache<IdType, ObjectType>, scope: CoroutineScope, locker: SmartRWLocker = SmartRWLocker(), idGetter: (ObjectType) -> IdType): WriteCRUDCacheRepo<ObjectType, IdType, InputType>
Link copied to clipboard
open suspend override fun contains(id: IdType): Boolean

Returns true if an object with the given id exists in the repository.

Link copied to clipboard
open suspend override fun count(): Long

Returns the total count of objects stored in the repository.

Link copied to clipboard
open suspend override fun create(values: List<InputValueType>): List<ObjectType>

Creates new objects from the given list of input values. Successfully created objects must be emitted via newObjectsFlow.

Link copied to clipboard
Link copied to clipboard
open suspend override fun deleteById(ids: List<IdType>)

Deletes objects with the given list of IDs. Successfully deleted IDs must be emitted via deletedObjectsIdsFlow.

Link copied to clipboard

Vararg overload of WriteCRUDRepo.deleteById for convenience.

Link copied to clipboard

Computes the difference between this ReadCRUDRepo and a map of items. Retrieves all items from the repository and compares them with the provided map.

Link copied to clipboard
fun <ObjectType, IdType, InputType> CRUDRepo<ObjectType, IdType, InputType>.directFullyCached(kvCache: KeyValueRepo<IdType, ObjectType> = MapKeyValueRepo(), scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, locker: SmartRWLocker = SmartRWLocker(), idGetter: (ObjectType) -> IdType): DirectFullCRUDCacheRepo<ObjectType, IdType, InputType>
Link copied to clipboard
fun <ObjectType, IdType, InputType> CRUDRepo<ObjectType, IdType, InputType>.fullyCached(kvCache: KeyValueRepo<IdType, ObjectType> = MapKeyValueRepo(), scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, locker: SmartRWLocker = SmartRWLocker(), idGetter: (ObjectType) -> IdType): FullCRUDCacheRepo<ObjectType, IdType, InputType>
Link copied to clipboard
open suspend override fun getAll(): Map<IdType, ObjectType>

Returns all objects in the repository as a map of ID to object. Default implementation iterates all pages using getIdsByPagination and getById.

Link copied to clipboard
open suspend override fun getById(id: IdType): ObjectType?

Returns the object associated with the given id, or null if not found.

Link copied to clipboard
open suspend override fun getByPagination(pagination: Pagination): PaginationResult<ObjectType>

Returns a paginated list of all objects in the repository.

Link copied to clipboard
open suspend override fun getIdsByPagination(pagination: Pagination): PaginationResult<IdType>

Returns a paginated list of all IDs in the repository.

Link copied to clipboard
open suspend override fun invalidate()

Invalidates its internal data. It may lead to autoreload of data. In case when repo makes autoreload, it must do loading of data before clear

Link copied to clipboard
inline suspend fun ReadCRUDRepo<*, *>.maxPagePagination(): SimplePagination

Creates a pagination starting from the first page with size equal to the total count of items in this ReadCRUDRepo. This effectively creates a single page containing all items.

Link copied to clipboard
open suspend override fun update(values: List<UpdatedValuePair<IdType, InputValueType>>): List<ObjectType>

Batch-updates objects using the given list of ID-value pairs. Successfully updated objects must be emitted via updatedObjectsFlow.

open suspend override fun update(id: IdType, value: InputValueType): ObjectType?

Updates the object identified by id with the given value. Successfully updated object must be emitted via updatedObjectsFlow.

Link copied to clipboard
Link copied to clipboard

Wraps this ReadCRUDRepo with a mapper to expose different key and value types.

inline fun <FromKey, FromValue, FromInput, ToKey, ToValue, ToInput> CRUDRepo<ToValue, ToKey, ToInput>.withMapper(noinline keyFromToTo: suspend FromKey.() -> ToKey = { this as ToKey }, noinline valueFromToTo: suspend FromValue.() -> ToValue = { this as ToValue }, noinline inputFromToTo: suspend FromInput.() -> ToInput = { this as ToInput }, noinline keyToToFrom: suspend ToKey.() -> FromKey = { this as FromKey }, noinline valueToToFrom: suspend ToValue.() -> FromValue = { this as FromValue }, noinline inputToToFrom: suspend ToInput.() -> FromInput = { this as FromInput }): CRUDRepo<FromValue, FromKey, FromInput>
inline fun <FromKey, FromValue, FromInput, ToKey, ToValue, ToInput> WriteCRUDRepo<ToValue, ToKey, ToInput>.withMapper(noinline keyFromToTo: suspend FromKey.() -> ToKey = { this as ToKey }, noinline valueFromToTo: suspend FromValue.() -> ToValue = { this as ToValue }, noinline inputFromToTo: suspend FromInput.() -> ToInput = { this as ToInput }, noinline keyToToFrom: suspend ToKey.() -> FromKey = { this as FromKey }, noinline valueToToFrom: suspend ToValue.() -> FromValue = { this as FromValue }, noinline inputToToFrom: suspend ToInput.() -> FromInput = { this as FromInput }): WriteCRUDRepo<FromValue, FromKey, FromInput>

inline fun <FromKey, FromValue, ToKey, ToValue> ReadCRUDRepo<ToValue, ToKey>.withMapper(noinline keyFromToTo: suspend FromKey.() -> ToKey = { this as ToKey }, noinline valueFromToTo: suspend FromValue.() -> ToValue = { this as ToValue }, noinline keyToToFrom: suspend ToKey.() -> FromKey = { this as FromKey }, noinline valueToToFrom: suspend ToValue.() -> FromValue = { this as FromValue }): ReadCRUDRepo<FromValue, FromKey>

Wraps this ReadCRUDRepo with custom conversion functions for keys and values.