acceptCalendarEntry method Null safety

Future<CalendarEntry?> acceptCalendarEntry(
  1. {required CalendarEntry calendarEntry,
  2. required String userId}
)

Implementation

Future<CalendarEntry?> acceptCalendarEntry({
  required final CalendarEntry calendarEntry,
  required final String userId,
}) async {
  final ownInvitation = calendarEntry.invitations
      .firstWhereOrNull((element) => element.participant.userId == userId);

  if (ownInvitation == null) {
    return null;
  }

  final gqlQueryString = '''
    mutation AcceptInvitation {
      acceptInvitation(
        invitation: "${ownInvitation.id}",
      ) {
        ${InvitationGqlEntity.gqlQueryFragment}
      }
    }
  ''';

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

    if (queryResult.hasException) {
      logger?.e(queryResult.exception.toString());
      return null;
    }

    final data =
        queryResult.data!['acceptInvitation'] as Map<String, dynamic>;
    final updatedCalendarEntryEntity = CalendarEntryGqlEntity.fromJson(
        data['calendarEntry'] as Map<String, dynamic>);

    if (updatedCalendarEntryEntity == null) {
      return null;
    }
    final updatedCalendarEntry = updatedCalendarEntryEntity.toCalendarEntry();
    if (!_calendarStreamController.isClosed) {
      _calendarStreamController.add([
        EntityUpdated(updatedCalendarEntry, calendarEntry),
      ].toBuiltList());
    }
    return updatedCalendarEntry;
  } catch (e, stackTrace) {
    logger?.e('Could not accept invitation', e.toString(), stackTrace);
    return null;
  }
}