upsert<TModel extends RestModel> method
Future<Response?>
upsert<TModel extends RestModel>(
- TModel instance, {
- Query? query,
- ModelRepository<
RestModel> ? repository,
Query
's providerArgs
can extend the upsert functionality:
'request'
(RestRequest
) Specifies configurable information about the request like HTTP method or top level key
Implementation
@override
Future<http.Response?> upsert<TModel extends RestModel>(instance, {query, repository}) async {
final adapter = modelDictionary.adapterFor[TModel]!;
final body = await adapter.toRest(instance, provider: this, repository: repository);
final fromAdapter =
adapter.restRequest != null ? adapter.restRequest!(query, instance).upsert : null;
final request = (query?.providerArgs['request'] as RestRequest?) ?? fromAdapter;
final url = request?.url;
if (url == null) return null;
final combinedBody = <String, dynamic>{};
final topLevelKey = request?.topLevelKey;
if (topLevelKey != null) {
combinedBody.addAll({topLevelKey: body});
} else {
combinedBody.addAll(body);
}
final resp = await _brickRequestToHttpRequest(
request!,
QueryAction.upsert,
body: combinedBody,
query: query,
);
logger.finest('#upsert: url=$url statusCode=${resp.statusCode} body=${resp.body}');
if (statusCodeIsSuccessful(resp.statusCode)) {
return resp;
} else {
logger.warning('#upsert: url=$url statusCode=${resp.statusCode} body=${resp.body}');
throw RestException(resp);
}
}