public async Task <bool> UpdateUserReadMessageStatus(string userId, ChatUserReadStatusModel chatUserReadStatus)
        {
            if (userId == null)
            {
                throw new ArgumentNullException("The userId is null");
            }

            return(await _routingDataStore.UpdateUserReadMessageStatus(userId, chatUserReadStatus));
        }
        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;
            }
        }