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