public async Task ExecuteAsync(SendChatFileMessageCommand message, CancellationToken token)
        {
            var users = message.ToUsersId.ToList();

            users.Add(message.UserSendingId);
            var chatRoom = await _chatRoomRepository.GetChatRoomAsync(users, token);

            if (chatRoom == null)
            {
                chatRoom = new ChatRoom(users.Select(s => _userRepository.Load(s)).ToList());
                await _chatRoomRepository.AddAsync(chatRoom, token);
            }


            var user        = _userRepository.Load(message.UserSendingId);
            var chatMessage = new ChatAttachmentMessage(user, message.Blob, chatRoom);

            chatRoom.AddMessage(chatMessage);
            await _chatRoomRepository.UpdateAsync(chatRoom, token);

            await _chatMessageRepository.AddAsync(chatMessage, token);

            var id = chatMessage.Id;
            await _blobProvider.MoveAsync(message.Blob, $"{chatRoom.Id}/{id}", token);
        }
Beispiel #2
0
        public async Task ExecuteAsync(SendChatTextMessageCommand message, CancellationToken token)
        {
            //var users = message.ToUsersId.ToList();
            //users.Add(message.UserSendingId);
            var users = new[] { message.ToUsersId, message.UserSendingId };

            var chatRoom = await _chatRoomRepository.GetChatRoomAsync(users, token);

            if (chatRoom == null)
            {
                var userSending = await _userRepository.LoadAsync(message.UserSendingId, token);

                var userReceiving = await _userRepository.LoadAsync(message.ToUsersId, token);

                if (userReceiving.Tutor == null)
                {
                    throw new ArgumentException("sending a message not to tutor");
                }
                chatRoom = new ChatRoom(new List <User>()
                {
                    userSending, userReceiving
                });
                await _chatRoomRepository.AddAsync(chatRoom, token);
            }

            var user = _userRepository.Load(message.UserSendingId);

            var chatMessage = new ChatTextMessage(user, message.Message, chatRoom);

            chatRoom.AddMessage(chatMessage);
            await _chatRoomRepository.UpdateAsync(chatRoom, token);

            await _chatMessageRepository.AddAsync(chatMessage, token); // need this in order to get id from nhibernate
        }
Beispiel #3
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);
        }
        public async Task ExecuteAsync(ChangeConversationStatusCommand message, CancellationToken token)
        {
            var chatRoom = await _repository.GetChatRoomAsync(message.Identifier, token);

            if (chatRoom.Extra == null)
            {
                chatRoom.Extra = new ChatRoomAdmin(chatRoom);
            }
            chatRoom.Extra.Status = message.Status;


            await _repository.UpdateAsync(chatRoom, token);
        }
        public async Task ExecuteAsync(ResetUnreadInChatCommand message, CancellationToken token)
        {
            var users = message.ToUsersId.ToList();

            users.Add(message.UserSendingId);
            var chatRoom = await _chatRoomRepository.GetChatRoomAsync(users, token);

            if (chatRoom == null)
            {
                throw new NullReferenceException("no such room");
            }
            var user = chatRoom.Users.First(f => f.User.Id == message.UserSendingId);

            user.ResetUnread();
            await _chatUserRepository.UpdateAsync(user, token);
        }
        public async Task ExecuteAsync(ChangeConversationAssignCommand message, CancellationToken token)
        {
            var chatRoom = await _repository.GetChatRoomAsync(message.Identifier, token);

            if (chatRoom.Extra == null)
            {
                chatRoom.Extra = new ChatRoomAdmin(chatRoom);
            }

            if (string.IsNullOrEmpty(message.AssignTo))
            {
                chatRoom.Extra.AssignTo = null;
            }
            else
            {
                chatRoom.Extra.AssignTo = message.AssignTo;
            }

            await _repository.UpdateAsync(chatRoom, token);
        }