execute<TVariables extends JsonSerializable, TQueryResult> method

Future<GraphqlResult<TQueryResult>> execute<TVariables extends JsonSerializable, TQueryResult>({
  1. required String query,
  2. required TVariables variableValues,
  3. required DefaultGqlOperationType operationType,
  4. required FromJsonCallback<TQueryResult> fromJsonCallback,
})

Method to call mutations and queries

Implementation

Future<GraphqlResult<TQueryResult>>
    execute<TVariables extends JsonSerializable, TQueryResult>({
  required final String query,
  required final TVariables variableValues,
  required final DefaultGqlOperationType operationType,
  required final FromJsonCallback<TQueryResult> fromJsonCallback,
}) async {
  final document = gql_lang.parseString(query);
  CactusSync.l.info({
    'execute document': document,
    'operationType': operationType,
    'variableValues': variableValues,
  });
  final jsonVariableValues = variableValues.toJson();
  switch (operationType) {
    case DefaultGqlOperationType.create:
    case DefaultGqlOperationType.update:
    case DefaultGqlOperationType.remove:
      final queryResult = await client.mutate(
        MutationOptions(
          document: document,
          variables: {'input': jsonVariableValues},
        ),
      );
      return GraphqlResult.fromQueryResult<TQueryResult>(
        queryResult: queryResult,
        fromJsonCallback: fromJsonCallback,
      );
    case DefaultGqlOperationType.get:
    case DefaultGqlOperationType.find:
      final queryResult = await client.query(
        QueryOptions(
          document: document,
          variables: jsonVariableValues,
          fetchPolicy: defaultFetchPolicy,
        ),
      );
      return GraphqlResult.fromQueryResult<TQueryResult>(
        queryResult: queryResult,
        fromJsonCallback: fromJsonCallback,
      );
    case DefaultGqlOperationType.fromString:
      throw Exception(
        'DefaultGqlOperationType is fromString but '
        'has to be different',
      );
  }
}