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; } } }