André Thiele
04/01/2025, 6:12 AMAndré Thiele
04/02/2025, 9:01 AMMatthew Ramotar
04/04/2025, 1:34 AMMatthew Ramotar
04/04/2025, 1:35 AMsealed interface Operation<out T : Any> {
data class GetOne<T : Any>(val id: String) : Operation<T>
data object GetAll<T : Any> : Operation<List<T>>
}
Matthew Ramotar
04/04/2025, 1:38 AMval sourceOfTruth = SourceOfTruth.of<Operation<*>, Any, Any>(
reader = { key ->
when (key) {
is Operation.GetAll<*> -> database.getAllItemsFlow()
is Operation.GetOne<*> -> database.getItemByIdFlow(key.id)
}
},
writer = { key, value ->
when (key) {
is Operation.GetAll<*> -> {
val items = value as List<Item>
items.forEach { item ->
database.insertItem(item)
}
database.insertItems(items)
}
is Operation.GetOne<*> -> {
val item = value as Item
database.insertItem(item)
}
}
}
)
Matthew Ramotar
04/04/2025, 1:39 AMval fetcher = Fetcher.of { key ->
when (key) {
is Operation.GetAll<*> -> api.getAllItems()
is Operation.GetOne<*> -> api.getItem(key.id)
}
}
Matthew Ramotar
04/04/2025, 1:41 AM