public async Task <bool> UpdateUserReadMessageStatus(string userId, ChatUserReadStatusModel chatUserReadStatus)
        {
            ChatUserSessionDAO userSessionDAO = await _repoChatUserSessions.GetItemAsync(userId);

            if (userSessionDAO == null)
            {
                return(false);
            }

            ChatUserReadStatusDAOObject chatUserReadDAO = null;

            if (userSessionDAO.UsersReadStatus != null)
            {
                chatUserReadDAO = userSessionDAO.UsersReadStatus.Find(p => p.UserId == chatUserReadStatus.UserId);
            }
            else
            {
                userSessionDAO.UsersReadStatus = new List <ChatUserReadStatusDAOObject>();
            }

            //Doesn't exist, we add it.
            if (chatUserReadDAO == null)
            {
                chatUserReadDAO = new ChatUserReadStatusDAOObject
                {
                    UserId = chatUserReadStatus.UserId
                };
                userSessionDAO.UsersReadStatus.Add(chatUserReadDAO);
            }

            chatUserReadDAO.Date = chatUserReadStatus.Date;

            try
            {
                return(await _repoChatUserSessions.UpdateItemAsync(userSessionDAO));
            }
            catch (DocumentClientException e)
            {
                //Update concurrency issue, retrying
                if (e.StatusCode == HttpStatusCode.PreconditionFailed)
                {
                    return(await UpdateUserReadMessageStatus(userId, chatUserReadStatus));
                }
                throw e;
            }
        }
        public async Task <bool> AddConversationReference(ConversationReference conversationReference)
        {
            ChatUserSessionDAO newDAO = Mapper.Map <ChatUserSessionDAO>(conversationReference);

            ChatUserSessionDAO oldDAO = await _repoChatUserSessions.GetItemAsync(newDAO.Id);

            if (oldDAO == null)
            {
                string id = await _repoChatUserSessions.CreateItemAsync(newDAO);

                return(!string.IsNullOrEmpty(id));
            }
            else
            {
                oldDAO.BotId          = newDAO.BotId;
                oldDAO.BotName        = newDAO.BotName;
                oldDAO.ChannelId      = newDAO.ChannelId;
                oldDAO.ConversationId = newDAO.ConversationId;
                oldDAO.ServiceUrl     = newDAO.ServiceUrl;
                oldDAO.Name           = newDAO.Name;
                oldDAO.Role           = newDAO.Role;

                try
                {
                    return(await _repoChatUserSessions.UpdateItemAsync(oldDAO));
                }
                catch (DocumentClientException e)
                {
                    //Update concurrency issue, retrying
                    if (e.StatusCode == HttpStatusCode.PreconditionFailed)
                    {
                        return(await AddConversationReference(conversationReference));
                    }
                    throw e;
                }
            }
        }