public async Task <IActionResult> SaveMessage(SaveMessageDTO message) { var userFromRepo = await _userRepository.GetUserById(message.UserId); var conversation = await _chatRepository.GetConversation(message.ConversationId); if (conversation != null) { await _chatRepository.SaveMessage(conversation, message, userFromRepo); } else { conversation = await _chatRepository.CreateConversation(message.UserId, message.ReceiverId); await _chatRepository.SaveMessage(conversation, message, userFromRepo); } var messagesToSent = conversation.Messages.Select(p => { var msg = _mapper.Map <MessageDTO>(p); msg.Type = p.Sender.Id == message.UserId ? "sent" : "received"; return(msg); }); await NotifyPlayers($"CONV_{conversation.Id}", new { Id = conversation.Id, Messages = messagesToSent }); var users = (_userRepository.GetUsers()).Where(p => p.Id != message.UserId); return(Ok(users.Select(user => new UserForConversationDTO() { Id = user.Id, FirstName = user.FirstName, LastName = user.LastName, UserName = user.UserName, UserRole = user.UserRole, AvatarUrl = user.AvatarUrl ?? @"https://housecommunitystorage.blob.core.windows.net/avatarcontainer/user_avatar.png", IsBuildingSame = user.UserFlats.Any(p => { return userFromRepo.UserFlats.Select(p => p.Flat.BuildingId).Any(b => b == p.Flat?.BuildingId); }) }).ToList() )); }