diff --git a/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/bookings/BookingsStore.kt b/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/bookings/BookingsStore.kt index a82db9a3b374..7936263e40da 100644 --- a/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/bookings/BookingsStore.kt +++ b/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/network/rest/wpcom/wc/bookings/BookingsStore.kt @@ -46,11 +46,6 @@ class BookingsStore @Inject internal constructor( return@withDefaultContext WooResult(ordersResult.error) } - if (page == 1 && filters.isEmpty() && query.isNullOrEmpty()) { - // Clear existing bookings when fetching the first page - bookingsDao.deleteAllForSite(site.localId()) - } - val entities = response.result.map { with(bookingDtoMapper) { it.toEntity( @@ -59,7 +54,12 @@ class BookingsStore @Inject internal constructor( ) } } - bookingsDao.insertOrReplace(entities) + if (page == 1 && filters.isEmpty() && query.isNullOrEmpty()) { + // Clear existing bookings and insert new ones when fetching the first page + bookingsDao.replaceAllForSite(site.localId(), entities) + } else { + bookingsDao.insertOrReplace(entities) + } val totalPages = headersParser.getTotalPages(response.headers) // Determine if we can load more from the total pages header if available, otherwise // infer it from the number of items returned diff --git a/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/persistence/dao/BookingsDao.kt b/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/persistence/dao/BookingsDao.kt index eec317aff1b4..b2ee9b99ee71 100644 --- a/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/persistence/dao/BookingsDao.kt +++ b/libs/fluxc-plugin/src/main/kotlin/org/wordpress/android/fluxc/persistence/dao/BookingsDao.kt @@ -4,6 +4,7 @@ import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import androidx.room.Transaction import kotlinx.coroutines.flow.Flow import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId import org.wordpress.android.fluxc.network.rest.wpcom.wc.bookings.BookingsFilterOption @@ -61,6 +62,12 @@ interface BookingsDao { @Query("DELETE FROM Bookings WHERE localSiteId = :localSiteId") suspend fun deleteAllForSite(localSiteId: LocalId) + @Transaction + suspend fun replaceAllForSite(siteId: LocalId, entities: List) { + deleteAllForSite(siteId) + insertOrReplace(entities) + } + fun observeBookings( localSiteId: LocalId, limit: Int? = null,