Applying partial updates to the Room database
Right now, our application is saving the restaurants that we receive from the remote web API directly inside the Room database.
This is not a bad approach; however, whenever we are marking a restaurant as a favorite, we aren't updating the corresponding restaurant inside Room. If we take a look inside the RestaurantsViewModel
class and we check its toggleFavorite()
method, we can see that we're only updating the isFavorite
flag of a restaurant inside the state
variable:
fun toggleFavorite(id: Int) { val restaurants = state.value.toMutableList() val itemIndex = restaurants.indexOfFirst { it.id == id } val item = restaurants[itemIndex] restaurants[itemIndex] = item.copy(isFavorite = !item.isFavorite) storeSelection(restaurants[itemIndex]) ...