public async Task NewMessage(string senderId, string recipientId, int chatId, string content) { AppUser sender = userManager.Users .FirstOrDefault(u => u.Id == senderId); string senderPhoto = (sender.ProfilePhotoUrl != null) ? $"/UsersData/{sender.ProfilePhotoUrl}" : "/defaultAvatar.png"; string senderName = (sender.FirstName == null && sender.LastName == null) ? sender.UserName : $"{sender.FirstName} {sender.LastName}"; AppUser recipient = userManager.Users .FirstOrDefault(u => u.Id == recipientId); string recipientPhoto = (recipient.ProfilePhotoUrl != null) ? $"/UsersData/{recipient.ProfilePhotoUrl}" : "/defaultAvatar.png"; string recipientName = (recipient.FirstName == null && recipient.LastName == null) ? recipient.UserName : $"{recipient.FirstName} {recipient.LastName}"; string date = DateTime.Now.ToString("HH:mm"); int msgId; Chat chat; if (chatId == 0) { chat = new Chat { User1Id = senderId, User2Id = recipientId, User1Checkpoint = DateTime.Now, User2Checkpoint = DateTime.Now }; repository.NewChat(chat); chat = repository.Chats .FirstOrDefault(c => c.User1Id == senderId && c.User2Id == recipientId); ChatMessage msg = new ChatMessage { UserId = senderId, DateAdded = DateTime.Now, MessageType = "Txt", MessageContent = content, Seen = false }; repository.NewChatMessage(msg, chat); msgId = repository.Chats .FirstOrDefault(c => c.ChatId == chat.ChatId) .Messages.LastOrDefault(m => m.UserId == senderId).Id; } else { chat = repository.Chats .FirstOrDefault(c => c.ChatId == chatId); ChatMessage msg = new ChatMessage { UserId = senderId, DateAdded = DateTime.Now, MessageType = "Txt", MessageContent = content, Seen = false }; repository.NewChatMessage(msg, chat); msgId = repository.Chats .FirstOrDefault(c => c.ChatId == chatId) .Messages.LastOrDefault(m => m.UserId == senderId).Id; } await Clients.All.SendAsync("PostNewMessage", msgId, recipientId, senderId, senderName, date, content); await Clients.All.SendAsync("ChatIndexNewMsg", senderId, recipientId, chat.ChatId, senderName, date, content, chat.Messages.Where(m => m.Seen == false).Count(), senderPhoto); await Clients.All.SendAsync("UserHeaderNewMsg", senderId, recipientId, chat.ChatId, senderName, date, content, chat.Messages.Where(m => m.Seen == false).Count(), senderPhoto, recipientPhoto, recipientName); }