Batch sync news resources from remote

Batch sync news resources from remote to reduce json payload size.
pull/608/head
Adetunji Dahunsi 2 years ago committed by GitHub
parent 0844d021b9
commit 267adfd27f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -34,6 +34,8 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import javax.inject.Inject
private const val SYNC_BATCH_SIZE = 40
/**
* Disk storage backed implementation of the [NewsRepository].
* Reads are exclusively from local storage to support offline access.
@ -65,7 +67,8 @@ class OfflineFirstNewsRepository @Inject constructor(
},
modelDeleter = newsResourceDao::deleteNewsResources,
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!
@ -76,8 +79,9 @@ class OfflineFirstNewsRepository @Inject constructor(
.distinctBy(TopicEntity::id),
)
newsResourceDao.upsertNewsResources(
newsResourceEntities = networkNewsResources
.map(NetworkNewsResource::asEntity),
newsResourceEntities = networkNewsResources.map(
NetworkNewsResource::asEntity
),
)
newsResourceDao.insertOrIgnoreTopicCrossRefEntities(
newsResourceTopicCrossReferences = networkNewsResources
@ -85,6 +89,7 @@ class OfflineFirstNewsRepository @Inject constructor(
.distinct()
.flatten(),
)
}
},
)
}

Loading…
Cancel
Save