diff options
author | 2024-05-26 04:53:43 +0100 | |
---|---|---|
committer | 2024-05-26 05:00:31 +0100 | |
commit | 0654e66d14f2f7b320b9bef084b1e96b9e4a4f1a (patch) | |
tree | 58f150223928db1c64987597c330c9700a9a4f5c | |
parent | Add serializer for mod_settings response key on User objects (diff) |
Add method for PATCHing new moderator settings
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/user.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/pydis_site/apps/api/viewsets/bot/user.py b/pydis_site/apps/api/viewsets/bot/user.py index ce712a93..ba6d25b9 100644 --- a/pydis_site/apps/api/viewsets/bot/user.py +++ b/pydis_site/apps/api/viewsets/bot/user.py @@ -15,10 +15,11 @@ from rest_framework.viewsets import ModelViewSet from pydis_site.apps.api.models.bot.infraction import Infraction from pydis_site.apps.api.models.bot.metricity import Metricity, NotFoundError -from pydis_site.apps.api.models.bot.user import User, UserAltRelationship +from pydis_site.apps.api.models.bot.user import User, UserAltRelationship, UserModSettings from pydis_site.apps.api.serializers import ( UserSerializer, UserAltRelationshipSerializer, + UserModSettingsSerializer, UserWithAltsSerializer ) @@ -367,6 +368,26 @@ class UserViewSet(ModelViewSet): return Response(serializer.data, status=status.HTTP_200_OK) + @action(detail=True, methods=["PATCH"], name='mod-settings-update') + def mod_settings(self, request: Request, pk: str) -> Response: + """Update the mod settings for a given user.""" + user = self.get_object() + maybe_mod_settings = UserModSettings.objects.filter(moderator=user).first() + + mod_settings_data = ChainMap({'moderator': user.id}, request.data) + + if maybe_mod_settings: + mod_settings = UserModSettingsSerializer(maybe_mod_settings, data=mod_settings_data) + else: + mod_settings = UserModSettingsSerializer(data=mod_settings_data) + + mod_settings.is_valid(raise_exception=True) + + mod_settings.save() + + return Response(mod_settings.data, status=status.HTTP_200_OK) + + @action(detail=True, methods=['POST'], name="Add alternate account", url_name='alts', url_path='alts') def add_alt(self, request: Request, pk: str) -> Response: |