temporarySaveProductV3 static method

Future<ProductResultV3> temporarySaveProductV3(
  1. User user,
  2. String barcode, {
  3. List<ProductPackaging>? packagings,
  4. bool? packagingsComplete,
  5. UriProductHelper uriHelper = uriHelperFoodProd,
  6. OpenFoodFactsCountry? country,
  7. OpenFoodFactsLanguage? language,
})

Temporary: saves product packagings V3 style.

For the moment that's the only field supported in WRITE by API V3. Long term target is of course more something like saveProduct.

Implementation

static Future<ProductResultV3> temporarySaveProductV3(
  final User user,
  final String barcode, {
  final List<ProductPackaging>? packagings,
  final bool? packagingsComplete,
  final UriProductHelper uriHelper = uriHelperFoodProd,
  final OpenFoodFactsCountry? country,
  final OpenFoodFactsLanguage? language,
}) async {
  final Map<String, dynamic> parameterMap = <String, dynamic>{};
  parameterMap.addAll(user.toData());
  if (packagings == null && packagingsComplete == null) {
    // For the moment there are limited fields concerned.
    throw Exception('At least one V3 field must be populated.');
  }
  const String productTag = 'product';
  parameterMap[productTag] = {};
  if (packagings != null) {
    parameterMap[productTag][ProductField.PACKAGINGS.offTag] = packagings;
  }
  if (packagingsComplete != null) {
    parameterMap[productTag][ProductField.PACKAGINGS_COMPLETE.offTag] =
        packagingsComplete;
  }
  if (language != null) {
    parameterMap['lc'] = language.offTag;
    parameterMap['tags_lc'] = language.offTag;
  }
  if (country != null) {
    parameterMap['cc'] = country.offTag;
  }

  var productUri = uriHelper.getPatchUri(
    path: '/api/v3/product/$barcode',
  );

  final Response response = await HttpHelper().doPatchRequest(
    productUri,
    parameterMap,
    user,
    uriHelper: uriHelper,
  );
  return ProductResultV3.fromJson(HttpHelper().jsonDecode(response.body));
}