diff --git a/osf/models/user.py b/osf/models/user.py index 04cc0df6662..23eae1a91c5 100644 --- a/osf/models/user.py +++ b/osf/models/user.py @@ -18,6 +18,7 @@ from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager from django.contrib.auth.hashers import check_password from django.contrib.auth.models import PermissionsMixin +from django.contrib.contenttypes.models import ContentType from django.core.exceptions import FieldDoesNotExist from django.dispatch import receiver from django.db import models @@ -877,6 +878,29 @@ def merge_user(self, user): except Exception as e: logger.exception(f'Failed to SHARE reindex preprint {preprint._id} during user merge: {e}') + from osf.models import AbstractNode, Preprint + from addons.osfstorage.models import OsfStorageFile + node_ctype = ContentType.objects.get_for_model(AbstractNode) + preprint_ctype = ContentType.objects.get_for_model(Preprint) + nodes_files_to_reindex = OsfStorageFile.objects.filter( + target_object_id__in=user.contributed.values_list('id', flat=True), target_content_type=node_ctype, + guids__isnull=False + ) + preprints_files_to_reindex = OsfStorageFile.objects.filter( + target_object_id__in=user.preprints.values_list('id', flat=True), target_content_type=preprint_ctype, + guids__isnull=False + ) + for file in nodes_files_to_reindex.iterator(chunk_size=100): + try: + update_share(file) + except Exception as e: + logger.exception(f'Failed to SHARE reindex file {file._id} during user merge: {e}') + for file in preprints_files_to_reindex.iterator(chunk_size=100): + try: + update_share(file) + except Exception as e: + logger.exception(f'Failed to SHARE reindex preprints file {file._id} during user merge: {e}') + def _merge_users_preprints(self, user): """ Preprints use guardian. The PreprintContributor table stores order and bibliographic information.