Batch sync news resources from remote

Batch sync news resources from remote to reduce json payload size.
pull/1837/head
Adetunji Dahunsi 3 years ago committed by GitHub
parent 042b5ff393
commit 4d6188e7ab

@ -34,6 +34,8 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import javax.inject.Inject import javax.inject.Inject
private const val SYNC_BATCH_SIZE = 40
/** /**
* Disk storage backed implementation of the [NewsRepository]. * Disk storage backed implementation of the [NewsRepository].
* Reads are exclusively from local storage to support offline access. * Reads are exclusively from local storage to support offline access.
@ -65,7 +67,8 @@ class OfflineFirstNewsRepository @Inject constructor(
}, },
modelDeleter = newsResourceDao::deleteNewsResources, modelDeleter = newsResourceDao::deleteNewsResources,
modelUpdater = { changedIds -> modelUpdater = { changedIds ->
val networkNewsResources = network.getNewsResources(ids = changedIds) changedIds.chunked(SYNC_BATCH_SIZE).forEach { chunkedIds
val networkNewsResources = network.getNewsResources(ids = chunkedIds)
// Order of invocation matters to satisfy id and foreign key constraints! // Order of invocation matters to satisfy id and foreign key constraints!
@ -76,8 +79,9 @@ class OfflineFirstNewsRepository @Inject constructor(
.distinctBy(TopicEntity::id), .distinctBy(TopicEntity::id),
) )
newsResourceDao.upsertNewsResources( newsResourceDao.upsertNewsResources(
newsResourceEntities = networkNewsResources newsResourceEntities = networkNewsResources.map(
.map(NetworkNewsResource::asEntity), NetworkNewsResource::asEntity
),
) )
newsResourceDao.insertOrIgnoreTopicCrossRefEntities( newsResourceDao.insertOrIgnoreTopicCrossRefEntities(
newsResourceTopicCrossReferences = networkNewsResources newsResourceTopicCrossReferences = networkNewsResources
@ -85,6 +89,7 @@ class OfflineFirstNewsRepository @Inject constructor(
.distinct() .distinct()
.flatten(), .flatten(),
) )
}
}, },
) )
} }

Loading…
Cancel
Save