From 4ccc2cce8edc76d65685129f82b05d00f339fd4e Mon Sep 17 00:00:00 2001 From: Aditya Khajuria Date: Tue, 17 Oct 2023 16:52:30 +0530 Subject: [PATCH 01/11] Update the version of resource after updates are downloaded from the server --- engine/src/main/java/com/google/android/fhir/MoreResources.kt | 4 ++-- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/com/google/android/fhir/MoreResources.kt b/engine/src/main/java/com/google/android/fhir/MoreResources.kt index 1511e5daa1..f444acbe19 100644 --- a/engine/src/main/java/com/google/android/fhir/MoreResources.kt +++ b/engine/src/main/java/com/google/android/fhir/MoreResources.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 Google LLC + * Copyright 2022-2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -57,7 +57,7 @@ fun getResourceClass(resourceType: String): Class { return Class.forName(R4_RESOURCE_PACKAGE_PREFIX + className) as Class } -internal val Resource.versionId +internal val Resource.versionId: String? get() = meta.versionId internal val Resource.lastUpdated diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index d7f25d388f..e9c5ddbde9 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -67,6 +67,7 @@ internal abstract class ResourceDao { serializedResource = iParser.encodeResourceToString(resource), lastUpdatedLocal = timeOfLocalChange, lastUpdatedRemote = lastUpdatedRemote?.toInstant() ?: it.lastUpdatedRemote, + versionId = resource.versionId ?: it.versionId, ) // The foreign key in Index entity tables is set with cascade delete constraint and // insertResource has REPLACE conflict resolution. So, when we do an insert to update the From 59346624c129a433d6ab3ce9d87eba8be24b90d1 Mon Sep 17 00:00:00 2001 From: Aditya Khajuria Date: Tue, 17 Oct 2023 19:44:04 +0530 Subject: [PATCH 02/11] Review changes: Added tests and refactored code --- .../android/fhir/db/impl/DatabaseImpl.kt | 2 +- .../android/fhir/db/impl/dao/ResourceDao.kt | 70 +++++++++------- .../android/fhir/impl/FhirEngineImplTest.kt | 84 +++++++++++++++++++ 3 files changed, 127 insertions(+), 29 deletions(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt b/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt index a5cf77719c..9d8aab6aa5 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt @@ -140,7 +140,7 @@ internal class DatabaseImpl( resources.forEach { val timeOfLocalChange = Instant.now() val oldResourceEntity = selectEntity(it.resourceType, it.logicalId) - resourceDao.update(it, timeOfLocalChange) + resourceDao.updateLocalChange(it, timeOfLocalChange) localChangeDao.addUpdate(oldResourceEntity, it, timeOfLocalChange) } } diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index e9c5ddbde9..1aba728b71 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -58,43 +58,57 @@ internal abstract class ResourceDao { lateinit var iParser: IParser lateinit var resourceIndexer: ResourceIndexer - open suspend fun update(resource: Resource, timeOfLocalChange: Instant?) { + open suspend fun updateLocalChange(resource: Resource, timeOfLocalChange: Instant?) { getResourceEntity(resource.logicalId, resource.resourceType)?.let { - // In case the resource has lastUpdated meta data, use it, otherwise use the old value. - val lastUpdatedRemote: Date? = resource.meta.lastUpdated val entity = it.copy( serializedResource = iParser.encodeResourceToString(resource), lastUpdatedLocal = timeOfLocalChange, - lastUpdatedRemote = lastUpdatedRemote?.toInstant() ?: it.lastUpdatedRemote, - versionId = resource.versionId ?: it.versionId, ) - // The foreign key in Index entity tables is set with cascade delete constraint and - // insertResource has REPLACE conflict resolution. So, when we do an insert to update the - // resource, it deletes old resource and corresponding index entities (based on foreign key - // constrain) before inserting the new resource. - insertResource(entity) - val index = - ResourceIndices.Builder(resourceIndexer.index(resource)) - .apply { - timeOfLocalChange?.let { - addDateTimeIndex( - createLocalLastUpdatedIndex( - resource.resourceType, - InstantType(Date.from(timeOfLocalChange)), - ), - ) - } - lastUpdatedRemote?.let { date -> - addDateTimeIndex(createLastUpdatedIndex(resource.resourceType, InstantType(date))) - } - } - .build() - updateIndicesForResource(index, resource.resourceType, it.resourceUuid) + updateChanges(entity, resource) + } + ?: throw ResourceNotFoundException(resource.resourceType.name, resource.id) + } + + open suspend fun updateRemoteChange(resource: Resource) { + getResourceEntity(resource.logicalId, resource.resourceType)?.let { + val lastUpdatedRemote: Date? = resource.meta.lastUpdated + val entity = + it.copy( + serializedResource = iParser.encodeResourceToString(resource), + lastUpdatedRemote = lastUpdatedRemote?.toInstant(), + versionId = resource.versionId, + ) + updateChanges(entity, resource) } ?: throw ResourceNotFoundException(resource.resourceType.name, resource.id) } + // WARNING : This is a private function and shouldn't be called directly. + open suspend fun updateChanges(entity: ResourceEntity, resource: Resource) { + // The foreign key in Index entity tables is set with cascade delete constraint and + // insertResource has REPLACE conflict resolution. So, when we do an insert to update the + // resource, it deletes old resource and corresponding index entities (based on foreign key + // constrain) before inserting the new resource. + insertResource(entity) + val index = + ResourceIndices.Builder(resourceIndexer.index(resource)) + .apply { + entity.lastUpdatedLocal?.let { instant -> + addDateTimeIndex( + createLocalLastUpdatedIndex(resource.resourceType, InstantType(Date.from(instant))), + ) + } + entity.lastUpdatedRemote?.let { instant -> + addDateTimeIndex( + createLastUpdatedIndex(resource.resourceType, InstantType(Date.from(instant))), + ) + } + } + .build() + updateIndicesForResource(index, resource.resourceType, entity.resourceUuid) + } + open suspend fun insertAllRemote(resources: List): List { return resources.map { resource -> insertRemoteResource(resource) } } @@ -190,7 +204,7 @@ internal abstract class ResourceDao { private suspend fun insertRemoteResource(resource: Resource): UUID { val existingResourceEntity = getResourceEntity(resource.logicalId, resource.resourceType) if (existingResourceEntity != null) { - update(resource, existingResourceEntity.lastUpdatedLocal) + updateRemoteChange(resource) return existingResourceEntity.resourceUuid } return insertResource(resource, null) diff --git a/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt b/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt index a77a6b76f4..eed48f0176 100644 --- a/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt +++ b/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt @@ -24,6 +24,7 @@ import com.google.android.fhir.LocalChange.Type import com.google.android.fhir.LocalChangeToken import com.google.android.fhir.db.ResourceNotFoundException import com.google.android.fhir.get +import com.google.android.fhir.lastUpdated import com.google.android.fhir.logicalId import com.google.android.fhir.search.LOCAL_LAST_UPDATED_PARAM import com.google.android.fhir.search.search @@ -36,7 +37,9 @@ import com.google.android.fhir.sync.upload.UploadSyncResult import com.google.android.fhir.testing.assertResourceEquals import com.google.android.fhir.testing.assertResourceNotEquals import com.google.android.fhir.testing.readFromFile +import com.google.android.fhir.versionId import com.google.common.truth.Truth.assertThat +import java.time.Instant import java.util.Date import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flowOf @@ -592,6 +595,87 @@ class FhirEngineImplTest { assertResourceEquals(fhirEngine.get("original-002"), localChange) } + @Test + fun `syncDownload ResourceEntity should have the latest versionId and lastUpdated from server`() = + runBlocking { + val originalPatient = + Patient().apply { + id = "original-002" + meta = + Meta().apply { + versionId = "1" + lastUpdated = Date.from(Instant.parse("2022-12-02T10:15:30.00Z")) + } + addName( + HumanName().apply { + family = "Stark" + addGiven("Tony") + }, + ) + } + // First sync + fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf((originalPatient)))) } + + val remoteChange = + originalPatient.copy().apply { + meta = + Meta().apply { + versionId = "2" + lastUpdated = Date.from(Instant.parse("2022-12-03T10:15:30.00Z")) + } + addAddress(Address().apply { country = "USA" }) + } + + // Sync to get updates from server + fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf(remoteChange))) } + + val result = services.database.selectEntity(ResourceType.Patient, "original-002") + assertThat(result.versionId).isEqualTo(remoteChange.versionId) + assertThat(result.lastUpdatedRemote).isEqualTo(remoteChange.lastUpdated) + } + + @Test + fun `syncDownload LocalChangeEntity should have the latest versionId from server`() = + runBlocking { + val originalPatient = + Patient().apply { + id = "original-002" + meta = + Meta().apply { + versionId = "1" + lastUpdated = Date.from(Instant.parse("2022-12-02T10:15:30.00Z")) + } + addName( + HumanName().apply { + family = "Stark" + addGiven("Tony") + }, + ) + } + // First sync + fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf((originalPatient)))) } + + val localChange = + originalPatient.copy().apply { addAddress(Address().apply { city = "Malibu" }) } + fhirEngine.update(localChange) + + val remoteChange = + originalPatient.copy().apply { + meta = + Meta().apply { + versionId = "2" + lastUpdated = Date.from(Instant.parse("2022-12-03T10:15:30.00Z")) + } + addAddress(Address().apply { country = "USA" }) + } + + // Sync to get updates from server + fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf(remoteChange))) } + + val result = fhirEngine.getLocalChanges(ResourceType.Patient, "original-002").first() + assertThat(result.versionId).isEqualTo(remoteChange.versionId) + } + @Test fun `create should allow patient search with LOCAL_LAST_UPDATED_PARAM`(): Unit = runBlocking { val patient = Patient().apply { id = "patient-id-create" } From 5bbbeda60de06ed7a194667a1965cdec3568e2e0 Mon Sep 17 00:00:00 2001 From: Aditya Khajuria Date: Wed, 18 Oct 2023 12:29:33 +0530 Subject: [PATCH 03/11] Review comments updates --- .../android/fhir/db/impl/DatabaseImpl.kt | 2 +- .../android/fhir/db/impl/dao/ResourceDao.kt | 22 ++++++++++++++----- .../android/fhir/impl/FhirEngineImplTest.kt | 14 ++++++------ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt b/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt index 9d8aab6aa5..acb3572325 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/DatabaseImpl.kt @@ -140,7 +140,7 @@ internal class DatabaseImpl( resources.forEach { val timeOfLocalChange = Instant.now() val oldResourceEntity = selectEntity(it.resourceType, it.logicalId) - resourceDao.updateLocalChange(it, timeOfLocalChange) + resourceDao.applyLocalUpdate(it, timeOfLocalChange) localChangeDao.addUpdate(oldResourceEntity, it, timeOfLocalChange) } } diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 1aba728b71..e09817bd75 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -58,7 +58,13 @@ internal abstract class ResourceDao { lateinit var iParser: IParser lateinit var resourceIndexer: ResourceIndexer - open suspend fun updateLocalChange(resource: Resource, timeOfLocalChange: Instant?) { + /** + * Updates the resource in the [ResourceEntity] and adds indexes. + * + * @param [resource] The resource with local (on device) updates. + * @param [timeOfLocalChange] Time when the local change was made. + */ + suspend fun applyLocalUpdate(resource: Resource, timeOfLocalChange: Instant?) { getResourceEntity(resource.logicalId, resource.resourceType)?.let { val entity = it.copy( @@ -70,13 +76,17 @@ internal abstract class ResourceDao { ?: throw ResourceNotFoundException(resource.resourceType.name, resource.id) } - open suspend fun updateRemoteChange(resource: Resource) { + /** + * Updates the resource in the [ResourceEntity] and adds indexes. + * + * @param [resource] The resource with the remote(server) updates. + */ + private suspend fun applyRemoteUpdate(resource: Resource) { getResourceEntity(resource.logicalId, resource.resourceType)?.let { - val lastUpdatedRemote: Date? = resource.meta.lastUpdated val entity = it.copy( serializedResource = iParser.encodeResourceToString(resource), - lastUpdatedRemote = lastUpdatedRemote?.toInstant(), + lastUpdatedRemote = resource.meta.lastUpdated?.toInstant(), versionId = resource.versionId, ) updateChanges(entity, resource) @@ -85,7 +95,7 @@ internal abstract class ResourceDao { } // WARNING : This is a private function and shouldn't be called directly. - open suspend fun updateChanges(entity: ResourceEntity, resource: Resource) { + private suspend fun updateChanges(entity: ResourceEntity, resource: Resource) { // The foreign key in Index entity tables is set with cascade delete constraint and // insertResource has REPLACE conflict resolution. So, when we do an insert to update the // resource, it deletes old resource and corresponding index entities (based on foreign key @@ -204,7 +214,7 @@ internal abstract class ResourceDao { private suspend fun insertRemoteResource(resource: Resource): UUID { val existingResourceEntity = getResourceEntity(resource.logicalId, resource.resourceType) if (existingResourceEntity != null) { - updateRemoteChange(resource) + applyRemoteUpdate(resource) return existingResourceEntity.resourceUuid } return insertResource(resource, null) diff --git a/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt b/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt index eed48f0176..4cd475fd7e 100644 --- a/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt +++ b/engine/src/test/java/com/google/android/fhir/impl/FhirEngineImplTest.kt @@ -616,7 +616,7 @@ class FhirEngineImplTest { // First sync fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf((originalPatient)))) } - val remoteChange = + val updatedPatient = originalPatient.copy().apply { meta = Meta().apply { @@ -627,11 +627,11 @@ class FhirEngineImplTest { } // Sync to get updates from server - fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf(remoteChange))) } + fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf(updatedPatient))) } val result = services.database.selectEntity(ResourceType.Patient, "original-002") - assertThat(result.versionId).isEqualTo(remoteChange.versionId) - assertThat(result.lastUpdatedRemote).isEqualTo(remoteChange.lastUpdated) + assertThat(result.versionId).isEqualTo(updatedPatient.versionId) + assertThat(result.lastUpdatedRemote).isEqualTo(updatedPatient.lastUpdated) } @Test @@ -659,7 +659,7 @@ class FhirEngineImplTest { originalPatient.copy().apply { addAddress(Address().apply { city = "Malibu" }) } fhirEngine.update(localChange) - val remoteChange = + val updatedPatient = originalPatient.copy().apply { meta = Meta().apply { @@ -670,10 +670,10 @@ class FhirEngineImplTest { } // Sync to get updates from server - fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf(remoteChange))) } + fhirEngine.syncDownload(AcceptLocalConflictResolver) { flowOf((listOf(updatedPatient))) } val result = fhirEngine.getLocalChanges(ResourceType.Patient, "original-002").first() - assertThat(result.versionId).isEqualTo(remoteChange.versionId) + assertThat(result.versionId).isEqualTo(updatedPatient.versionId) } @Test From e735c9d83b943c4cdac2aa9d6e6cbc77e24b0974 Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:45:24 +0530 Subject: [PATCH 04/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index e09817bd75..af94468dbe 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -119,7 +119,7 @@ internal abstract class ResourceDao { updateIndicesForResource(index, resource.resourceType, entity.resourceUuid) } - open suspend fun insertAllRemote(resources: List): List { + suspend fun insertAllRemote(resources: List): List { return resources.map { resource -> insertRemoteResource(resource) } } From 238b4781517acd9562a5f45244d1f8bb281b1edb Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:45:33 +0530 Subject: [PATCH 05/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index af94468dbe..808981f24a 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -61,7 +61,7 @@ internal abstract class ResourceDao { /** * Updates the resource in the [ResourceEntity] and adds indexes. * - * @param [resource] The resource with local (on device) updates. + * @param [resource] the resource with local (on device) updates * @param [timeOfLocalChange] Time when the local change was made. */ suspend fun applyLocalUpdate(resource: Resource, timeOfLocalChange: Instant?) { From 8cdc95537d58cc487781a0ff57a941f2bd051a33 Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:45:41 +0530 Subject: [PATCH 06/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 808981f24a..93b09b3e1d 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -62,7 +62,7 @@ internal abstract class ResourceDao { * Updates the resource in the [ResourceEntity] and adds indexes. * * @param [resource] the resource with local (on device) updates - * @param [timeOfLocalChange] Time when the local change was made. + * @param [timeOfLocalChange] time when the local change was made */ suspend fun applyLocalUpdate(resource: Resource, timeOfLocalChange: Instant?) { getResourceEntity(resource.logicalId, resource.resourceType)?.let { From 30b43a7a532bc220529a46124e50e926cd46c94f Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:45:49 +0530 Subject: [PATCH 07/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 93b09b3e1d..0933ad10ab 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -79,7 +79,7 @@ internal abstract class ResourceDao { /** * Updates the resource in the [ResourceEntity] and adds indexes. * - * @param [resource] The resource with the remote(server) updates. + * @param [resource] the resource with the remote(server) updates */ private suspend fun applyRemoteUpdate(resource: Resource) { getResourceEntity(resource.logicalId, resource.resourceType)?.let { From a183d728fab86181d63d25978de624690161542a Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:45:56 +0530 Subject: [PATCH 08/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 0933ad10ab..72479d7309 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -77,7 +77,7 @@ internal abstract class ResourceDao { } /** - * Updates the resource in the [ResourceEntity] and adds indexes. + * Updates the resource in the [ResourceEntity] and adds indexes as a result of downloading the resource from server. * * @param [resource] the resource with the remote(server) updates */ From da46834206cd76d4ed3c4917bfbd500676571547 Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:46:05 +0530 Subject: [PATCH 09/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 72479d7309..7bdd14e31d 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -59,7 +59,7 @@ internal abstract class ResourceDao { lateinit var resourceIndexer: ResourceIndexer /** - * Updates the resource in the [ResourceEntity] and adds indexes. + * Updates the resource in the [ResourceEntity] and adds indexes as a result of changes made on device. * * @param [resource] the resource with local (on device) updates * @param [timeOfLocalChange] time when the local change was made From 006a92c7eef85ab915de345afa1cd9d696d6cffe Mon Sep 17 00:00:00 2001 From: aditya-07 Date: Wed, 18 Oct 2023 12:46:14 +0530 Subject: [PATCH 10/11] Update engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt Co-authored-by: Jing Tang --- .../main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 7bdd14e31d..074af5a735 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -94,7 +94,6 @@ internal abstract class ResourceDao { ?: throw ResourceNotFoundException(resource.resourceType.name, resource.id) } - // WARNING : This is a private function and shouldn't be called directly. private suspend fun updateChanges(entity: ResourceEntity, resource: Resource) { // The foreign key in Index entity tables is set with cascade delete constraint and // insertResource has REPLACE conflict resolution. So, when we do an insert to update the From fc420e01c8bc0c815bf5d9dc8d7d622ba9e241ac Mon Sep 17 00:00:00 2001 From: Aditya Khajuria Date: Wed, 18 Oct 2023 12:48:57 +0530 Subject: [PATCH 11/11] Spotless --- .../com/google/android/fhir/db/impl/dao/ResourceDao.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt index 074af5a735..b4213abef3 100644 --- a/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt +++ b/engine/src/main/java/com/google/android/fhir/db/impl/dao/ResourceDao.kt @@ -59,7 +59,8 @@ internal abstract class ResourceDao { lateinit var resourceIndexer: ResourceIndexer /** - * Updates the resource in the [ResourceEntity] and adds indexes as a result of changes made on device. + * Updates the resource in the [ResourceEntity] and adds indexes as a result of changes made on + * device. * * @param [resource] the resource with local (on device) updates * @param [timeOfLocalChange] time when the local change was made @@ -77,7 +78,8 @@ internal abstract class ResourceDao { } /** - * Updates the resource in the [ResourceEntity] and adds indexes as a result of downloading the resource from server. + * Updates the resource in the [ResourceEntity] and adds indexes as a result of downloading the + * resource from server. * * @param [resource] the resource with the remote(server) updates */ @@ -118,7 +120,7 @@ internal abstract class ResourceDao { updateIndicesForResource(index, resource.resourceType, entity.resourceUuid) } - suspend fun insertAllRemote(resources: List): List { + suspend fun insertAllRemote(resources: List): List { return resources.map { resource -> insertRemoteResource(resource) } }