public async Task <OutGoingMessageDTO> AddMessageToContact(AppUser user, IncomingMessageDTO message) { var outgoingMessage = new OutGoingMessageDTO { Message = message.Message, ContactID = message.ContactId, IsUserTab = message.IsUserTab }; Contact contact = null; if (message.IsUserTab) { contact = user.Contacts.FirstOrDefault(x => x.ID == message.ContactId); if (contact == null) { throw new Exception("This contact doesn't 'belong' to this user"); } outgoingMessage.UserToSendId = contact.Vendor.UserID; outgoingMessage.Image = user.Image; } else { user.Vendors.ToList().ForEach(x => { var c = x.Contacts.FirstOrDefault(y => y.ID == message.ContactId); if (c != null) { contact = c; outgoingMessage.UserToSendId = contact.UserID; outgoingMessage.Image = x.Image; } }); } try { contact.Messages.Add(new Message { Text = message.Message, Contact = contact, IsUserSender = message.IsUserTab }); contact.ReceiverRead = !message.IsUserTab; contact.UserRead = message.IsUserTab; _context.Update(contact); await _context.SaveChangesAsync(); outgoingMessage.VendorTitle = contact.Vendor.Title; } catch (Exception ex) { throw ex; } return(outgoingMessage); }
public async Task <IActionResult> CreateMessage([FromBody] IncomingMessageDTO incMessageDto) { OutGoingMessageDTO outgoingMessageDto; try { var user = await _userManager.GetUserAsync(User); outgoingMessageDto = await _chatService.AddMessageToContact(user, incMessageDto); } catch { return(BadRequest()); } await _hubContext.Clients.User(outgoingMessageDto.UserToSendId).SendAsync("sendNewMessage", JsonConvert.SerializeObject(outgoingMessageDto)); return(Ok(outgoingMessageDto)); }