Slide 54
Slide 54 text
class TodoViewModel : CoroutineScope {
var todos: Observable> = Observable()
private val job = SupervisorJob()
private val dispatcher = Dispatchers.Default
override val coroutineContext: CoroutineContext
get() = job + dispatcher
fun fetchAll() {
launch {
withContext(Dispatchers.IO) {
todos.value = newSuspendedTransaction(Dispatchers.IO, database) {
val query = Todos.join(Users, JoinType.LEFT, Todos.userId, Users.id)
.selectAll()
.orderBy(Todos.completedAt, SortOrder.DESC)
.orderBy(Todos.dueAt, SortOrder.ASC)
.orderBy(Todos.title, SortOrder.ASC)
query.map { resultRow ->
Todo(
id = resultRow[Todos.id].value,
title = resultRow[Todos.title],
dueAt = resultRow[Todos.dueAt],
notes = resultRow[Todos.description],
user = User(
id = resultRow[Users.id]?.value,
name = resultRow[Users.name]
),
completedAt = resultRow[Todos.completedAt]
)
}
}
}
}
}
...
}
}