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