aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/serializers.py
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps/api/serializers.py')
-rw-r--r--pydis_site/apps/api/serializers.py13
1 files changed, 7 insertions, 6 deletions
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index a560d491..51afbe73 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -1,5 +1,6 @@
"""Converters from Django models to data interchange formats and back."""
from django.db.models.query import QuerySet
+from rest_framework.exceptions import NotFound
from rest_framework.serializers import (
IntegerField,
ListSerializer,
@@ -260,16 +261,16 @@ class UserListSerializer(ListSerializer):
def create(self, validated_data: list) -> list:
"""Override create method to optimize django queries."""
- present_users = User.objects.all()
new_users = []
- present_user_ids = [user.id for user in present_users]
+ request_user_ids = [user["id"] for user in validated_data]
for user_dict in validated_data:
- if user_dict["id"] in present_user_ids:
- raise ValidationError({"id": "User already exists."})
+ if request_user_ids.count(user_dict["id"]) > 1:
+ raise ValidationError({"id": f"User with ID {user_dict['id']} "
+ f"given multiple times."})
new_users.append(User(**user_dict))
- return User.objects.bulk_create(new_users)
+ return User.objects.bulk_create(new_users, ignore_conflicts=True)
def update(self, instance: QuerySet, validated_data: list) -> list:
"""
@@ -288,7 +289,7 @@ class UserListSerializer(ListSerializer):
try:
user = instance_mapping[user_data["id"]]
except KeyError:
- raise ValidationError({"id": f"User with id {user_data['id']} not found."})
+ raise NotFound({"id": f"User with id {user_data['id']} not found."})
user.__dict__.update(user_data)
updated.append(user)