diff --git a/src/euphorie/upgrade/deployment/v1/20240423105626_clean_up_last_modifier_id/__init__.py b/src/euphorie/upgrade/deployment/v1/20240423105626_clean_up_last_modifier_id/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/euphorie/upgrade/deployment/v1/20240423105626_clean_up_last_modifier_id/upgrade.py b/src/euphorie/upgrade/deployment/v1/20240423105626_clean_up_last_modifier_id/upgrade.py new file mode 100644 index 000000000..d5d7ef1b1 --- /dev/null +++ b/src/euphorie/upgrade/deployment/v1/20240423105626_clean_up_last_modifier_id/upgrade.py @@ -0,0 +1,33 @@ +from euphorie.client.model import Account +from euphorie.client.model import Session +from euphorie.client.model import SurveySession +from ftw.upgrade import UpgradeStep + +import logging + + +logger = logging.getLogger(__name__) + + +class CleanUpLastModifierId(UpgradeStep): + """Clean up last_modifier_id.""" + + def __call__(self): + session = Session() + obsolete_guest_users = ( + session.query(Account, SurveySession) + .filter(Account.id == SurveySession.last_modifier_id) + .filter(Account.id != SurveySession.account_id) + .filter(Account.account_type == "guest") + ) + for guest_user, assessment in obsolete_guest_users: + assessment.last_modifier_id = assessment.account_id + logger.info("Updated session %s", assessment.id) + num_assessments = ( + session.query(SurveySession) + .filter(SurveySession.account_id == guest_user.id) + .count() + ) + if num_assessments == 0: + session.delete(guest_user) + logger.info("Deleted user %s", guest_user.id)