![JAR search and dependency download from the Maven repository](/logo.png)
commonMain.com.harmony.kotlin.domain.interactor.Interactor.kt Maven / Gradle / Ivy
package com.harmony.kotlin.domain.interactor
import com.harmony.kotlin.data.operation.DefaultOperation
import com.harmony.kotlin.data.operation.Operation
import com.harmony.kotlin.data.query.IdQuery
import com.harmony.kotlin.data.query.IdsQuery
import com.harmony.kotlin.data.query.Query
import com.harmony.kotlin.data.query.VoidQuery
import com.harmony.kotlin.data.repository.DeleteRepository
import com.harmony.kotlin.data.repository.GetRepository
import com.harmony.kotlin.data.repository.PutRepository
import kotlinx.coroutines.withContext
import kotlin.coroutines.CoroutineContext
class GetInteractor(private val coroutineContext: CoroutineContext, private val getRepository: GetRepository) {
suspend operator fun invoke(query: Query = VoidQuery, operation: Operation = DefaultOperation): M =
withContext(coroutineContext) {
getRepository.get(query, operation)
}
}
@Deprecated(message = "Use GetInteractor instead")
class GetAllInteractor(private val coroutineContext: CoroutineContext, private val getRepository: GetRepository) {
suspend operator fun invoke(query: Query = VoidQuery, operation: Operation = DefaultOperation): List =
withContext(coroutineContext) {
getRepository.getAll(query, operation)
}
}
class PutInteractor(private val coroutineContext: CoroutineContext, private val putRepository: PutRepository) {
suspend operator fun invoke(m: M? = null, query: Query = VoidQuery, operation: Operation = DefaultOperation): M =
withContext(coroutineContext) {
putRepository.put(query, m, operation)
}
}
@Deprecated(message = "Use PutInteractor instead")
class PutAllInteractor(private val coroutineContext: CoroutineContext, private val putRepository: PutRepository) {
suspend operator fun invoke(m: List? = null, query: Query = VoidQuery, operation: Operation = DefaultOperation): List =
withContext(coroutineContext) {
putRepository.putAll(query, m, operation)
}
}
class DeleteInteractor(private val coroutineContext: CoroutineContext, private val deleteRepository: DeleteRepository) {
suspend operator fun invoke(query: Query = VoidQuery, operation: Operation = DefaultOperation) =
withContext(coroutineContext) {
deleteRepository.delete(query, operation)
}
}
suspend fun GetInteractor.execute(id: K, operation: Operation = DefaultOperation): V = this.invoke(IdQuery(id), operation)
suspend fun GetAllInteractor.execute(ids: List, operation: Operation = DefaultOperation): List = this.invoke(IdsQuery(ids), operation)
suspend fun PutInteractor.execute(id: K, value: V?, operation: Operation = DefaultOperation): V = this.invoke(value, IdQuery(id), operation)
suspend fun PutAllInteractor.execute(ids: List, values: List? = emptyList(), operation: Operation = DefaultOperation) =
this.invoke(values, IdsQuery(ids), operation)
suspend fun DeleteInteractor.execute(id: K, operation: Operation = DefaultOperation) = this.invoke(IdQuery(id), operation)
fun GetRepository.toGetInteractor(coroutineContext: CoroutineContext) = GetInteractor(coroutineContext, this)
@Deprecated(message = "Replaced by toGetInteractor")
fun GetRepository.toGetAllInteractor(coroutineContext: CoroutineContext) = GetAllInteractor(coroutineContext, this)
fun PutRepository.toPutInteractor(coroutineContext: CoroutineContext) = PutInteractor(coroutineContext, this)
@Deprecated(message = "Replaced by toPutInteractor")
fun PutRepository.toPutAllInteractor(coroutineContext: CoroutineContext) = PutAllInteractor(coroutineContext, this)
fun DeleteRepository.toDeleteInteractor(coroutineContext: CoroutineContext) = DeleteInteractor(coroutineContext, this)
© 2015 - 2025 Weber Informatics LLC | Privacy Policy