All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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