public ChangeGroupResponse ChangeGroup(ISession session, ChangeGroupRequest request)
        {
            var response  = request.CreateResponse <ChangeGroupResponse>();
            var groupChat = _groupChatsRepository.GetChat(request.GroupId);

            if (!HasAccess(groupChat, session.UserId))
            {
                response.Success = false;
                response.Error   = Errors.OperationIsNotPermitted;
                return(response);
            }

            if (groupChat.Avatar != request.NewGroupAvatar)
            {
                groupChat.Avatar = request.NewGroupAvatar;
                _groupChatsRepository.UpdateOrCreateGroup(groupChat);
                foreach (var participant in groupChat.Participants)
                {
                    _groupChangedEventManager.DeliverEventToDevices(participant.Devices,
                                                                    () => new GroupChangedEvent
                    {
                        ChangesAuthorId = session.UserId,
                        GroupId         = request.GroupId,
                        Avatar          = request.NewGroupAvatar,
                        Type            = GroupChangedEvent.ChangesType.NewAvatar
                    });
                }
            }

            if (groupChat.Name != request.NewGroupName)
            {
                groupChat.Name = request.NewGroupName;
                _groupChatsRepository.UpdateOrCreateGroup(groupChat);
                foreach (var participant in groupChat.Participants)
                {
                    _groupChangedEventManager.DeliverEventToDevices(participant.Devices,
                                                                    () => new GroupChangedEvent
                    {
                        ChangesAuthorId = session.UserId,
                        GroupId         = request.GroupId,
                        Name            = request.NewGroupName,
                        Type            = GroupChangedEvent.ChangesType.NewName
                    });
                }
            }
            return(response);
        }