Exemplo n.º 1
0
        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);
        }