upsert<TModel extends TRepositoryModel>  method 
      
  
Future<TModel> 
upsert<TModel extends TRepositoryModel>( 
    
- TModel instance, {
- Query? query,
- OfflineFirstUpsertPolicy policy = OfflineFirstUpsertPolicy.optimisticLocal,
inherited
    Send a model to remoteProvider and hydrate.
Implementation
@override
Future<TModel> upsert<TModel extends TRepositoryModel>(
  TModel instance, {
  Query? query,
  OfflineFirstUpsertPolicy policy = OfflineFirstUpsertPolicy.optimisticLocal,
}) async {
  final withPolicy = applyPolicyToQuery(query, upsert: policy);
  if (query?.action == null) {
    query = (withPolicy ?? const Query()).copyWith(action: QueryAction.upsert);
  }
  logger.finest('#upsert: $query $instance');
  final optimisticLocal = policy == OfflineFirstUpsertPolicy.optimisticLocal;
  final requireRemote = policy == OfflineFirstUpsertPolicy.requireRemote;
  if (optimisticLocal) {
    instance.primaryKey = await _upsertLocal<TModel>(instance, query: query);
    await notifySubscriptionsWithLocalData<TModel>();
  }
  try {
    await remoteProvider.upsert<TModel>(instance, query: query, repository: this);
    if (requireRemote) {
      instance.primaryKey = await _upsertLocal<TModel>(instance, query: query);
      await notifySubscriptionsWithLocalData<TModel>();
    }
  } on ClientException catch (e) {
    logger.warning('#upsert client failure: $e');
    if (requireRemote) rethrow;
  } on SocketException catch (e) {
    logger.warning('#upsert socket failure: $e');
    if (requireRemote) rethrow;
  }
  // ignore: unawaited_futures
  if (autoHydrate) hydrate<TModel>(query: query);
  return instance;
}