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;
}
}