![JAR search and dependency download from the Maven repository](/logo.png)
commonMain.com.harmony.kotlin.data.repository.RepositoryMapper.kt Maven / Gradle / Ivy
package com.harmony.kotlin.data.repository
import com.harmony.kotlin.data.mapper.Mapper
import com.harmony.kotlin.data.mapper.map
import com.harmony.kotlin.data.operation.Operation
import com.harmony.kotlin.data.query.Query
/**
* This repository uses mappers to map objects and redirects them to the contained repository, acting as a simple "translator".
*
* @param getRepository Repository with get operations
* @param putRepository Repository with put operations
* @param deleteRepository Repository with delete operations
* @param toOutMapper Mapper to map data objects to domain objects
* @param toInMapper Mapper to map domain objects to data objects
*/
class RepositoryMapper(
private val getRepository: GetRepository,
private val putRepository: PutRepository,
private val deleteRepository: DeleteRepository,
private val toOutMapper: Mapper,
private val toInMapper: Mapper
) : GetRepository, PutRepository, DeleteRepository {
override suspend fun get(query: Query, operation: Operation): Out = get(getRepository, toOutMapper, query, operation)
@Deprecated("Use get instead")
override suspend fun getAll(query: Query, operation: Operation): List = getAll(getRepository, toOutMapper, query, operation)
override suspend fun put(query: Query, value: Out?, operation: Operation): Out = put(putRepository, toOutMapper, toInMapper, value, query, operation)
@Deprecated("Use put instead")
override suspend fun putAll(query: Query, value: List?, operation: Operation): List = putAll(
putRepository, toOutMapper, toInMapper, value, query,
operation
)
override suspend fun delete(query: Query, operation: Operation) = deleteRepository.delete(query, operation)
}
class GetRepositoryMapper(
private val getRepository: GetRepository,
private val toOutMapper: Mapper
) : GetRepository {
override suspend fun get(query: Query, operation: Operation): Out = get(getRepository, toOutMapper, query, operation)
@Deprecated("Use get instead")
override suspend fun getAll(query: Query, operation: Operation): List = getAll(getRepository, toOutMapper, query, operation)
}
class PutRepositoryMapper(
private val putRepository: PutRepository,
private val toOutMapper: Mapper,
private val toInMapper: Mapper
) : PutRepository {
override suspend fun put(query: Query, value: Out?, operation: Operation): Out = put(putRepository, toOutMapper, toInMapper, value, query, operation)
@Deprecated("Use put instead")
override suspend fun putAll(query: Query, value: List?, operation: Operation): List = putAll(
putRepository, toOutMapper, toInMapper, value,
query, operation
)
}
private suspend fun get(
getRepository: GetRepository,
toOutMapper: Mapper,
query: Query,
operation: Operation
): Out = getRepository.get(query, operation).let { toOutMapper.map(it) }
private suspend fun getAll(
getRepository: GetRepository,
toOutMapper: Mapper,
query: Query,
operation: Operation
) = getRepository.getAll(query, operation).map { toOutMapper.map(it) }
private suspend fun put(
putRepository: PutRepository,
toOutMapper: Mapper,
toInMapper: Mapper,
value: Out?,
query: Query,
operation: Operation
): Out {
val mapped = value?.let { toInMapper.map(it) }
return putRepository.put(query, mapped, operation).let {
toOutMapper.map(it)
}
}
private suspend fun putAll(
putRepository: PutRepository,
toOutMapper: Mapper,
toInMapper: Mapper,
value: List?,
query: Query,
operation: Operation
): List {
val mapped = value?.let { toInMapper.map(it) }
return putRepository.putAll(query, mapped, operation).map { toOutMapper.map(it) }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy