public async Task AcceptInviteAsync(NaheulbookExecutionContext executionContext, int groupId, int characterId) { using (var uow = _unitOfWorkFactory.CreateUnitOfWork()) { var groupInvite = await uow.GroupInvites.GetByCharacterIdAndGroupIdWithGroupWithCharacterAsync(groupId, characterId); if (groupInvite == null) { throw new InviteNotFoundException(characterId, groupId); } if (groupInvite.Character.GroupId.HasValue) { throw new CharacterAlreadyInAGroupException(characterId); } _authorizationUtil.EnsureCanAcceptGroupInvite(executionContext, groupInvite); var allCharacterInvites = await uow.GroupInvites.GetInvitesByCharacterIdAsync(characterId); uow.GroupInvites.RemoveRange(allCharacterInvites); groupInvite.Character.GroupId = groupInvite.GroupId; await uow.SaveChangesAsync(); var notificationSession = _notificationSessionFactory.CreateSession(); notificationSession.NotifyCharacterAcceptGroupInvite(characterId, groupInvite); notificationSession.NotifyGroupAcceptGroupInvite(groupId, groupInvite); await notificationSession.CommitAsync(); } }