public async Task <IActionResult> PutConversationDetail(string id, ConversationDetail conversationDetail)
        {
            if (id != conversationDetail.ConversationId)
            {
                return(BadRequest());
            }

            _context.Entry(conversationDetail).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ConversationDetailExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <ConversationDetail> > DeleteConversation(ConversationDetail conversation)
        {
            ConversationDetail conversationDetail = await _context.ConversationDetails.FindAsync(conversation.ConversationId);

            if (conversationDetail == null)
            {
                return(NotFound());
            }

            //Delete all pertinent messages
            Debug.WriteLine(conversationDetail.FromPhoneNumber);
            Debug.WriteLine(conversationDetail.ToPhoneNumber);
            var messageDetails = await _messageContext.MessageDetails.Where(a =>
                                                                            (((a.FromPhoneNumber == conversationDetail.FromPhoneNumber) && (a.ToPhoneNumber == conversationDetail.ToPhoneNumber) && (a.Direction == "outbound-api")) ||
                                                                             ((a.FromPhoneNumber == conversationDetail.ToPhoneNumber) && (a.ToPhoneNumber == conversationDetail.FromPhoneNumber) && (a.Direction == "inbound")))
                                                                            ).ToListAsync();

            foreach (MessageDetail message in messageDetails)
            {
                _messageContext.MessageDetails.Remove(message);
            }
            await _messageContext.SaveChangesAsync();

            //End Delete all pertinent messages


            _context.ConversationDetails.Remove(conversationDetail);
            await _context.SaveChangesAsync();

            return(conversationDetail);
        }
Esempio n. 3
0
        public async Task <ActionResult <ConversationDetail> > GetConversationMessages(string fromPhoneNumber, string toPhoneNumber)
        {            //Update messages for all user phone numbers
            fromPhoneNumber = "+" + fromPhoneNumber;
            toPhoneNumber   = "+" + toPhoneNumber;

            ConversationDetail newResult = _conversationContext.ConversationDetails.Where(a => ((a.ToPhoneNumber == toPhoneNumber) && (a.FromPhoneNumber == fromPhoneNumber))).FirstOrDefault();

            return(newResult);
        }
Esempio n. 4
0
        public async Task <ActionResult> Delete(string conversationId)
        {
            string myUserId   = User.Identity.GetUserId();
            string myUserName = User.Identity.Name;

            ConversationDetail conversation = await _conDb.Conversations.FindAsync(new Guid(conversationId));

            if (conversation != null)
            {
                _conDb.Conversations.Remove(conversation);
            }
            await _conDb.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Esempio n. 5
0
        public async Task <ActionResult> Create(string id)
        {
            if (id == User.Identity.GetUserId())
            {
                return(Content("You can't chat with yourself!"));
            }
            string myUserId   = User.Identity.GetUserId();
            string myUserName = User.Identity.Name;

            if (!_conDb.Conversations.Where(x => x.FromUserId == id).Any(x => x.ToUserId == myUserId))
            {
                // create new conversation
                var newConversationDetail = new ConversationDetail()
                {
                    ConversationId  = Guid.NewGuid(),
                    FromUserId      = id,
                    ToUserId        = myUserId,
                    ToUserName      = myUserName,
                    UnreadMessageNo = 0,
                    Updatetime      = DateTime.Now
                };
                _conDb.Conversations.Add(newConversationDetail);
                await _conDb.SaveChangesAsync();
            }
            if (!_conDb.Conversations.Where(x => x.FromUserId == myUserId).Any(x => x.ToUserId == id))
            {
                // create new conversation
                var newConversationDetail = new ConversationDetail()
                {
                    ConversationId  = Guid.NewGuid(),
                    FromUserId      = myUserId,
                    ToUserId        = id,
                    ToUserName      = UserManager.FindById(id).UserName,
                    UnreadMessageNo = 0,
                    Updatetime      = DateTime.Now
                };
                _conDb.Conversations.Add(newConversationDetail);
                await _conDb.SaveChangesAsync();
            }

            //if target user is online, creating real time connection
            if (OnlineUsersHelper.CheckIfUserOnline(UserManager.FindById(id).UserName) &&
                OnlineUsersHelper.CheckIfUserOnline(UserManager.FindById(myUserId).UserName))
            {
            }

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult <ConversationDetail> > RenameConversation(ConversationDetail conversation)
        {
            ConversationDetail conversationDetail = await _context.ConversationDetails.FindAsync(conversation.ConversationId);

            conversationDetail.ConversationName = conversation.ConversationName;

            if (conversationDetail == null)
            {
                return(NotFound());
            }

            _context.ConversationDetails.Update(conversationDetail);
            await _context.SaveChangesAsync();

            return(conversationDetail);
        }
        public async Task <ActionResult <MessageDetail> > SendMessage(MessageDetail messageDetail)
        {
            //Get Signalwire number
            TwilioClient.Init("28361e6c-85b8-40f5-bde1-bfc8cf68a96c", "PT65bfa7479efd98c38f525e7c352277e70aff63ef22f4e8be", new Dictionary <string, object> {
                ["signalwireSpaceUrl"] = "manish.signalwire.com"
            });

            //Create and send outgoing message
            var message = MessageResource.Create(
                from: new Twilio.Types.PhoneNumber(messageDetail.FromPhoneNumber),
                body: messageDetail.Body,
                to: new Twilio.Types.PhoneNumber(messageDetail.ToPhoneNumber)
                );

            messageDetail.MessageSid = message.Sid;
            messageDetail.Time       = DateTime.UtcNow.ToString();
            messageDetail.Direction  = (message.Direction).ToString();

            _context.MessageDetails.Add(messageDetail);
            await _context.SaveChangesAsync();

            //Update conversation table

            var conversationsToUpdate = await _conversationContext.ConversationDetails.Where(a => ((a.FromPhoneNumber == messageDetail.FromPhoneNumber) && (a.ToPhoneNumber == messageDetail.ToPhoneNumber)) || ((a.FromPhoneNumber == messageDetail.ToPhoneNumber) && (a.ToPhoneNumber == messageDetail.FromPhoneNumber))).ToListAsync();

            if (conversationsToUpdate.Count != 0)
            {
                foreach (ConversationDetail convo in conversationsToUpdate)
                {
                    convo.LastMessage     = messageDetail.Body;
                    convo.LastMessageTime = messageDetail.Time;
                    _conversationContext.ConversationDetails.Update(convo);
                }
            }
            else
            {
                ConversationDetail convo = new ConversationDetail
                {
                    ConversationId   = messageDetail.ToPhoneNumber + messageDetail.FromPhoneNumber,
                    ConversationName = "",
                    FromPhoneNumber  = messageDetail.FromPhoneNumber,
                    ToPhoneNumber    = messageDetail.ToPhoneNumber,
                    LastMessage      = messageDetail.Body,
                    LastMessageTime  = messageDetail.Time
                };
                _conversationContext.ConversationDetails.Add(convo);
                convo = new ConversationDetail
                {
                    ConversationId   = messageDetail.FromPhoneNumber + messageDetail.ToPhoneNumber,
                    ConversationName = "",
                    FromPhoneNumber  = messageDetail.ToPhoneNumber,
                    ToPhoneNumber    = messageDetail.FromPhoneNumber,
                    LastMessage      = messageDetail.Body,
                    LastMessageTime  = messageDetail.Time
                };
                _conversationContext.ConversationDetails.Add(convo);
            }
            await _conversationContext.SaveChangesAsync();

            return(CreatedAtAction("GetMessageDetail", new { id = messageDetail.MessageSid }, messageDetail));
        }
        public async Task <ActionResult <ConversationDetail> > PostConversationDetail(ConversationDetail conversationDetail)
        {
            _context.ConversationDetails.Add(conversationDetail);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetConversationDetail", new { id = conversationDetail.ConversationId }, conversationDetail));
        }