updateFromProto3Json method

Future<Either<ErrorSqlResult, ExecuteSuccesSqlResult>> updateFromProto3Json(
  1. Map<String, dynamic> proto3Json
)

Implementation

Future<Either<ErrorSqlResult, ExecuteSuccesSqlResult>> updateFromProto3Json(
    Map<String, dynamic> proto3Json) async {
  clear();
  try {
    var pkfields = _currentRecord.fields
        .where((element) => element._isPrimaryKey)
        .toList();
    pkfields.forEach((pkfield) {
      if (proto3Json.containsKey(camelize(pkfield._fieldName, true))) {
        pkfield._trySetValue((proto3Json[camelize(pkfield._fieldName, true)]
            as Map<String, dynamic>)['value']);
      }
    });

    if (pkfields.length !=
        pkfields.where((element) => element._assigned).length) {
      return left(
          ErrorSqlResult('', '', '', ['All pkField must be assigned']));
    } else {
      return (await _materialize(pkfields)).fold((l) {
        return left(l);
      }, (r) {
        proto3Json.forEach((key, value) {
          _currentRecord.fields
              .singleWhere((field) => camelize(field._fieldName, true) == key)
              ._trySetValue((value as Map<String, dynamic>)['value']);
        });
        return update();
      });
    }
  } catch (e) {
    return left(ErrorSqlResult('', '', '', [e.toString()]));
  }
}