updateMoodEntry method Null safety

Future<MoodEntry?> updateMoodEntry(
  1. {required MoodEntry entry}
)

Updates entry in the backend. Assumes that entry already exists. Will return null if entry does not exist or if the update fails.

Implementation

Future<MoodEntry?> updateMoodEntry({required MoodEntry entry}) async {
  final gqlQueryString = '''
      mutation UpdateMoodEntry {
        updateMoodEntry(
          input: {
            where: { id: "${entry.id}" }
            data: {
              mood: ${MoodType.toDatabaseFormat(moodType: entry.mood)}
              dateTime: "${entry.dateTime}"
            }
          }
        ) {
          moodEntry {
            ${MoodEntryGqlEntity.gqlQueryFragment}
          }
        }
      }
    ''';

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

    if (queryResult.hasException) {
      logger?.e(queryResult.exception.toString());
      return null;
    }
  } catch (e, stackTrace) {
    logger?.e('Could not update mood entry', e, stackTrace);
    return null;
  }

  if (!_lastUpdatedMoodStreamController.isClosed) {
    _lastUpdatedMoodStreamController
        .add([EntityUpdated(entry, entry)].toBuiltList());
  }

  return entry;
}