setUserInterests method Null safety

  1. @protected
Future<bool> setUserInterests(
  1. {required User user,
  2. required BuiltSet<LocalizedType<Interest>> interests}
)

Implementation

@protected
Future<bool> setUserInterests(
    {required final User user,
    required final BuiltSet<LocalizedType<Interest>> interests}) async {
  if (user.firebaseUid == null) {
    return false;
  }

  final userId = await fetchUserId(user.firebaseUid!);

  if (userId == null) {
    return false;
  }

  final gqlQueryString = '''
    mutation SetUserInterests {
      updateUser(
        input: {
          where: { id: "$userId" }
          data: {
            interests: [${interests.map<String>((e) => e.defaultValue.id.toString()).toList().join(',')}]
          }
        }
      ) {
        user {
          ${UserGqlEntity.gqlQueryFragment}
        }
      }
    }
  ''';

  try {
    final queryResult = await graphQLClient
        .mutate<void>(MutationOptions(document: gql(gqlQueryString)));

    if (queryResult.hasException) {
      logger?.e(queryResult.exception.toString());
      return false;
    }
  } catch (e, stackTrace) {
    logger?.e(
        'Could not set list of interests on user instance', e, stackTrace);
    return false;
  }

  return true;
}