public IActionResult SendMessageToUser([Bind("AssetId, Subject, Body, SenderId, RecieverId")] MessageThreadDTO messageThreadDTO) { messageThreadDTO.RecieverId = HttpContext.Request.Cookies["RecieverId"]; var adminUser = _context.User.Single(u => u.Email == User.Identity.Name); messageThreadDTO.SenderId = adminUser.Id; messageThreadDTO.AssetId = 0; MessageRepository messageRepo = new MessageRepository(_context); MessageThreadRepository messageThreadRepo = new MessageThreadRepository(_context); // The reciever will always be the seller Message message; Notification notification; message = new Message(messageThreadDTO.Subject, messageThreadDTO.Body, false, false); string messageThreadId; string recieverEmail; string redirectURL; try { var messageThreadRetrieved = _context.MessageThread.Single(m => m.SenderId == messageThreadDTO.SenderId && m.RecieverId == messageThreadDTO.RecieverId); message.messageThread = messageThreadRetrieved; message.messageThread.LastUpdateDate = DateTime.Now; messageRepo.AddMessage(message); messageThreadId = message.messageThread.id.ToString(); recieverEmail = message.messageThread.RecieverEmail; message.messageThread.RecieverUnreadMessageCount += 1; message.RecieverUnread = true; } catch (InvalidOperationException) { messageRepo.AddMessage(message); MessageThread messageThread = new MessageThread(messageThreadDTO.SenderId, messageThreadDTO.RecieverId); messageThread.SenderEmail = _context.User.Single(u => u.Id == messageThreadDTO.SenderId).Email; messageThread.RecieverEmail = _context.User.Single(u => u.Id == messageThreadDTO.RecieverId).Email; messageThreadId = messageThread.id.ToString(); messageThread.messages.Add(message); recieverEmail = messageThread.RecieverEmail; messageThread.RecieverUnreadMessageCount += 1; message.RecieverUnread = true; messageThread.LastUpdateDate = DateTime.Now; messageThreadRepo.AddMessageThread(messageThread); } // This notification redirect URL should put the user to the discussion redirectURL = "/MessageThreads/Details/" + message.messageThread.id.ToString(); notification = new Notification(message.Subject, message.Body, redirectURL); Clients.Group(recieverEmail).AddNotificationToQueue(notification); _context.SaveChanges(); Clients.Group(recieverEmail).UpdateOverallNotificationCount(); return(RedirectToAction(nameof(AdminController.Index))); }
public async Task <IActionResult> Create([Bind("Subject, Body")] MessageThreadDTO messageThreadDTO) { var user = await _userManager.GetUserAsync(HttpContext.User); if (user == null) { return(Redirect("/Account/Login")); } string assetIdString = HttpContext.Request.Cookies["assetId"]; int assetId = int.Parse(assetIdString); string userId = await _userManager.GetUserIdAsync(user); messageThreadDTO.RecieverId = HttpContext.Request.Cookies["assetOwnerId"]; messageThreadDTO.SenderId = userId; messageThreadDTO.IsSender = true; messageThreadDTO.AssetId = assetId; _messageThreadApiController.Post(messageThreadDTO); return(RedirectToAction("Index")); }
public void Post([FromBody] MessageThreadDTO input) { // The reciever will always be the seller Message message; try { var messageThreadRetrieved = _context.MessageThread.Single(m => m.asset.assetID == input.AssetId && m.SenderId == input.SenderId); messageThreadRetrieved.LastUpdateDate = DateTime.Now; message = new Message(input.Subject, input.Body, false, false); message.messageThread = messageThreadRetrieved; _messageRepository.AddMessage(message); //if (User.Identity.Name == message.messageThread.RecieverEmail) if (!input.IsSender) { message.messageThread.SenderUnreadMessageCount += 1; message.SenderUnread = true; } else { message.messageThread.RecieverUnreadMessageCount += 1; message.RecieverUnread = true; } _messageRepository.Save(); } catch (InvalidOperationException) { message = new Message(input.Subject, input.Body, false, false); _messageRepository.AddMessage(message); MessageThread messageThread = new MessageThread(input.SenderId, input.RecieverId); messageThread.messages.Add(message); messageThread.LastUpdateDate = DateTime.Now; messageThread.SenderEmail = _context.User.Single(u => u.Id == input.SenderId).Email; messageThread.RecieverEmail = _context.User.Single(u => u.Id == input.RecieverId).Email; if (input.AssetId != 0) { messageThread.asset = _context.Asset.Single(a => a.assetID == input.AssetId); } _messageThreadRepository.AddMessageThread(messageThread); //if (User.Identity.Name == messageThread.RecieverEmail) if (!input.IsSender) { messageThread.SenderUnreadMessageCount += 1; message.SenderUnread = true; } else { messageThread.RecieverUnreadMessageCount += 1; message.RecieverUnread = true; } _messageThreadRepository.Save(); } var recieverUser = _context.User.Single(u => u.Id == input.RecieverId); // This notification redirect URL should put the user to the discussion string redirectURL = "/MessageThreads/Details/" + message.messageThread.id.ToString(); Notification notification = new Notification(message.Subject, message.Body, redirectURL); Clients.Group(recieverUser.UserName).UpdateOverallNotificationCount(); Clients.Group(recieverUser.UserName).AddNotificationToQueue(notification); }
public async Task <IActionResult> SendToAll() { MessageThreadDTO messageThreadDTO = new MessageThreadDTO(); return(View(messageThreadDTO)); }