public async Task ExecuteAsync(CreateStudyRoomCommand message, CancellationToken token) { var userTutor = await _userRepository.LoadAsync(message.TutorId, token); if (userTutor.Tutor?.State != ItemState.Ok) { throw new InvalidOperationException("user is not a tutor"); } var student = await _userRepository.LoadAsync(message.StudentId, token); var chatRoomIdentifier = ChatRoom.BuildChatRoomIdentifier(new[] { userTutor.Id, student.Id }); var chatRoom = await _chatRoomRepository.GetChatRoomAsync(chatRoomIdentifier, token); if (chatRoom.Messages.Count == 0) { throw new InvalidOperationException("no active conversation"); } var url = await _googleDocument.CreateOnlineDocAsync(chatRoomIdentifier, token); userTutor.AddFollower(student); var studyRoom = new StudyRoom(userTutor.Tutor, student, url); await _studyRoomRepository.AddAsync(studyRoom, token); }