4646import com .amplifyframework .hub .HubChannel ;
4747import com .amplifyframework .hub .HubEvent ;
4848import com .amplifyframework .logging .Logger ;
49+ import com .amplifyframework .util .GsonFactory ;
4950import com .amplifyframework .util .Time ;
51+ import com .google .gson .Gson ;
5052
5153import java .util .ArrayList ;
5254import java .util .Collections ;
@@ -80,6 +82,7 @@ final class SyncProcessor {
8082 private final DataStoreConfigurationProvider dataStoreConfigurationProvider ;
8183 private final QueryPredicateProvider queryPredicateProvider ;
8284 private final RetryHandler requestRetry ;
85+ private final Gson gson ; //TODO: for pre-deserialization of QueryPredicate, will remove shortly
8386
8487 /**
8588 * The `isSyncRetryEnabled` value is being passed down all the way from the `AWSDataStorePlugin` or the
@@ -97,7 +100,7 @@ private SyncProcessor(Builder builder) {
97100 this .queryPredicateProvider = builder .queryPredicateProvider ;
98101 this .requestRetry = builder .requestRetry ;
99102 this .isSyncRetryEnabled = builder .isSyncRetryEnabled ;
100-
103+ this . gson = GsonFactory . instance (); //TODO: for pre-deserialization of QueryPredicate, will remove shortly
101104 if (!this .isSyncRetryEnabled ) {
102105 LOG .warn ("Disabling sync retries will be deprecated in a future version." );
103106 }
@@ -182,10 +185,9 @@ Completable hydrate() {
182185
183186 private Completable createHydrationTask (ModelSchema schema ) {
184187 ModelSyncMetricsAccumulator metricsAccumulator = new ModelSyncMetricsAccumulator (schema .getName ());
185- //TODO: QueryPredicate currentPredicate = this.queryPredicateProvider.getPredicate(schema.getName());
186- //TODO deserialize current predicate to deserializedCurrentPredicate
187- //TODO: pass deserializedCurrentPredicate to lookupLastSyncTime as the second parameter
188- return syncTimeRegistry .lookupLastSyncTime (schema .getName ())
188+ QueryPredicate currentPredicate = this .queryPredicateProvider .getPredicate (schema .getName ());
189+ String serializedSyncExpression = gson .toJson (currentPredicate ); //TODO: for pre-deserialization of QueryPredicate, will remove shortly
190+ return syncTimeRegistry .lookupLastSyncTime (schema .getName (), serializedSyncExpression )
189191 .map (this ::filterOutOldSyncTimes )
190192 // And for each, perform a sync. The network response will contain an Iterable<ModelWithMetadata<T>>
191193 .flatMap (lastSyncTime -> {
@@ -204,10 +206,9 @@ private Completable createHydrationTask(ModelSchema schema) {
204206 .toSingle (() -> lastSyncTime .exists () ? SyncType .DELTA : SyncType .BASE );
205207 })
206208 .flatMapCompletable (syncType -> {
207- //TODO: pass the deserializedCurrentPredicate to saveLastDelta/BaseSync as the third parameter
208209 Completable syncTimeSaveCompletable = SyncType .DELTA .equals (syncType ) ?
209- syncTimeRegistry .saveLastDeltaSyncTime (schema .getName (), SyncTime .now (), null ) :
210- syncTimeRegistry .saveLastBaseSyncTime (schema .getName (), SyncTime .now (), null );
210+ syncTimeRegistry .saveLastDeltaSync (schema .getName (), SyncTime .now (), serializedSyncExpression ) :
211+ syncTimeRegistry .saveLastBaseSync (schema .getName (), SyncTime .now (), serializedSyncExpression );
211212 return syncTimeSaveCompletable .andThen (Completable .fromAction (() ->
212213 Amplify .Hub .publish (
213214 HubChannel .DATASTORE , metricsAccumulator .toModelSyncedEvent (syncType ).toHubEvent ()
0 commit comments