예제 #1
0
        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();
            }
        }