public async Task SendMessage(CreateMessageDTo createMessageDTo) { var username = Context.User.GetUsername(); if (username == createMessageDTo.RecipientUsername.ToLower()) { throw new HubException("You cannot send messages to yourself"); } var sender = await _unitOfWork.UserRepository.GetUserByUsermnameAsync(username); var recipient = await _unitOfWork.UserRepository.GetUserByUsermnameAsync(createMessageDTo.RecipientUsername); if (recipient == null) { throw new Exception("Not found user"); } var message = new Message { Sender = sender, Recipient = recipient, SenderUsername = sender.UserName, RecipientUsername = recipient.UserName, Content = createMessageDTo.Content }; var groupName = GetGroupeName(sender.UserName, recipient.UserName); var group = await _unitOfWork.MessageRepository.GetMessageGroup(groupName); if (group.Connections.Any(x => x.Username == recipient.UserName)) { message.DateRead = DateTime.UtcNow; } else { var connections = await _tracker.GetConnectionsForUser(recipient.UserName); if (connections != null) { await _presenceHub.Clients.Clients(connections).SendAsync("NewMessageReceived", new { username = sender.UserName, knownAs = sender.KnownAs }); } } _unitOfWork.MessageRepository.AddMessage(message); if (await _unitOfWork.Complete()) { await Clients.Group(groupName).SendAsync("NewMessage", _mapper.Map <MessageDTo>(message)); } }
public async Task <ActionResult <MessageDTo> > CreateMessage(CreateMessageDTo createMessageDTo) { var username = User.GetUsername(); if (username == createMessageDTo.RecipientUsername.ToLower()) { return(BadRequest("You cannot send messages to yourself")); } var sender = await _unitOfWork.UserRepository.GetUserByUsermnameAsync(username); var recipient = await _unitOfWork.UserRepository.GetUserByUsermnameAsync(createMessageDTo.RecipientUsername); if (recipient == null) { return(NotFound()); } var message = new Message { Sender = sender, Recipient = recipient, SenderUsername = sender.UserName, RecipientUsername = recipient.UserName, Content = createMessageDTo.Content }; _unitOfWork.MessageRepository.AddMessage(message); if (await _unitOfWork.Complete()) { return(Ok(_mapper.Map <MessageDTo>(message))); } return(BadRequest("Failed to send mesage")); }