Пример #1
0
        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)));
        }
Пример #2
0
        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);
        }
Пример #4
0
        public async Task <IActionResult> SendToAll()
        {
            MessageThreadDTO messageThreadDTO = new MessageThreadDTO();

            return(View(messageThreadDTO));
        }