public async Task ExecuteAsync(CreateStudyRoomSessionCommand message, CancellationToken token)
        {
            var room = await _studyRoomRepository.LoadAsync(message.StudyRoomId, token);

            if (room.Tutor.Id != message.UserId) //only tutor can open a session
            {
                throw new ArgumentException();
            }

            var lastSession = room.GetCurrentSession();

            if (lastSession != null)
            {
                var roomAvailable = await _videoProvider.GetRoomAvailableAsync(lastSession.SessionId);

                if (roomAvailable)
                {
                    lastSession.ReJoinStudyRoom();
                    return;
                }
            }
            var sessionName = $"{message.StudyRoomId}_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}";

            await _videoProvider.CreateRoomAsync(sessionName, room.Tutor.User.Country,
                                                 message.RecordVideo,
                                                 message.CallbackUrl,
                                                 room.Type.GetValueOrDefault(StudyRoomType.PeerToPeer)
                                                 );

            var session = new StudyRoomSession(room, sessionName);

            room.AddSession(session);
        }