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