diff --git a/forum/__init__.py b/forum/__init__.py index 3fa31c34..43406aba 100644 --- a/forum/__init__.py +++ b/forum/__init__.py @@ -2,4 +2,4 @@ Openedx forum app. """ -__version__ = "0.5.1" +__version__ = "0.5.2" diff --git a/forum/api/users.py b/forum/api/users.py index 9ebd808c..fbe5608b 100644 --- a/forum/api/users.py +++ b/forum/api/users.py @@ -9,6 +9,7 @@ from django.http import HttpRequest from forum.backend import get_backend +from forum.backends.mysql.api import MySQLBackend from forum.constants import FORUM_DEFAULT_PAGE, FORUM_DEFAULT_PER_PAGE from forum.serializers.thread import ThreadSerializer from forum.serializers.users import UserSerializer @@ -137,14 +138,19 @@ def retire_user( user = backend.get_user(user_id) if not user: raise ForumV2RequestError(f"user not found with id: {user_id}") - backend.update_user( - user_id, - data={ - "email": "", - "username": retired_username, - "read_states": [], - }, - ) + + # Prepare update data + data = { + "username": retired_username, + "read_states": [], + } + + # MongoDB backend owns user data and should blank email during retirement + # MySQL backend shares auth_user with LMS - LMS manages email field + if not isinstance(backend, MySQLBackend): + data["email"] = "" + + backend.update_user(user_id, data=data) backend.unsubscribe_all(user_id) backend.retire_all_content(user_id, retired_username) diff --git a/forum/backends/mysql/api.py b/forum/backends/mysql/api.py index 9feb0f79..b8d3b070 100644 --- a/forum/backends/mysql/api.py +++ b/forum/backends/mysql/api.py @@ -1359,7 +1359,7 @@ def replace_username(user_id: str, username: str) -> None: try: user = User.objects.get(id=user_id) user.username = username - user.save() + user.save(update_fields=["username"]) except User.DoesNotExist as exc: raise ValueError("User does not exist") from exc @@ -2439,8 +2439,10 @@ def update_user(user_id: str, data: dict[str, Any]) -> int: except ObjectDoesNotExist: return 0 + user_fields_to_update = [] if "username" in data: user.username = data["username"] + user_fields_to_update.append("username") # MySQL backend does not update auth_user.email (LMS manages it) if "default_sort_key" in data: forum_user.default_sort_key = data["default_sort_key"] @@ -2451,7 +2453,8 @@ def update_user(user_id: str, data: dict[str, Any]) -> int: # Then delete ReadState records user_read_states.delete() - user.save() + if user_fields_to_update: + user.save(update_fields=user_fields_to_update) forum_user.save() return 1 @@ -2461,7 +2464,7 @@ def replace_username_in_all_content(user_id: str, username: str) -> None: try: user = User.objects.get(pk=user_id) user.username = username - user.save() + user.save(update_fields=["username"]) # Update author_username in all content Comment.objects.filter(author=user).update(author_username=username)