public void ClearUserId(string userId) { // Replace invalid characters with empty strings. Can't pass it as a parameter, as string parameters get wrapped in '\"' when inserted var sanitisedUserId = Regex.Replace(userId, @"[^\w\.@-]", ""); // Get full ID var idForDynamicField = _dbSession.GetIdForDynamicField <User>(sanitisedUserId); var fullId = _dbSession.GetFullId <User>(userId); // Form a patch query var queryString = $@"FROM INDEX '{new BacklogItems_ForList().IndexName}' AS i WHERE i.{nameof(BacklogItemIndexedForList.MentionedUser)}_{idForDynamicField} != null UPDATE {{ i.{nameof(BacklogItem.Comments)}.forEach(comment => {{ let mentionedUsers = comment.{nameof(Comment.MentionedUserIds)}; if (mentionedUsers != null) Object.keys(mentionedUsers).forEach(key => {{ if (mentionedUsers[key].toLowerCase() == '{fullId}'.toLowerCase()) delete mentionedUsers[key]; }}); return comment; }}); }}" ; var query = new IndexQuery { Query = queryString }; // Add the patch to a collection _patchOperations.AddDeferredPatchQuery(query); }
public void ClearUserId(string userId) { // Replace invalid characters with empty strings. Can't pass it as a parameter, as string parameters get wrapped in '\"' when inserted var sanitisedUserId = Regex.Replace(userId, @"[^\w\.@-]", ""); // Get full ID var idForDynamicField = _dbSession.GetIdForDynamicField <User>(sanitisedUserId); var fullId = _dbSession.GetFullId <User>(userId); // Form a patch query var queryString = $@"FROM INDEX '{new BacklogItems_ForList().IndexName}' AS i WHERE i.{nameof(BacklogItemIndexedForList.ModifiedBy)}_{idForDynamicField} != null OR i.{nameof(BacklogItemIndexedForList.AssignedUserId)} == $userId UPDATE {{ if (i.{nameof(BacklogItemIndexedForList.Assignee)}.{nameof(UserReference.Id)}.toLowerCase() == $userId) {{ i.{nameof(BacklogItemIndexedForList.Assignee)} = null; }} i.{nameof(BacklogItem.Comments)}.forEach(comment => {{ if (comment.{nameof(Comment.Author)}.{nameof(UserReference.Id)}.toLowerCase() == $userId) {{ comment.{nameof(Comment.Author)}.{nameof(UserReference.Id)} = null; }} }}); i.{nameof(BacklogItem.ModifiedBy)}.forEach(modif => {{ if (modif.{nameof(BacklogItemHistoryRecord.ActionedBy)}.{nameof(UserReference.Id)}.toLowerCase() == $userId) modif.{nameof(BacklogItemHistoryRecord.ActionedBy)}.{nameof(UserReference.Id)} = null; }}); }}" ; var query = new IndexQuery { Query = queryString, QueryParameters = new Parameters { { "userId", fullId.ToLower() } } }; // Add the patch to a collection _patchOperations.AddDeferredPatchQuery(query); }