From 8bd297eeea7f04c456787c42ca48313e1af596dd Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Tue, 12 Nov 2024 15:32:03 -0400
Subject: [PATCH] feat: raise ValidationError on IntegrityError in
 PlaylistSerializer

---
 program/serializers.py | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/program/serializers.py b/program/serializers.py
index 9f5ad200..87b1e0f5 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -30,6 +30,7 @@ from rest_framework.permissions import exceptions
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.core.exceptions import ObjectDoesNotExist
+from django.db import IntegrityError
 from django.db.models import Q
 from django.utils import text, timezone
 from program.models import (
@@ -1524,7 +1525,13 @@ class PlaylistSerializer(serializers.ModelSerializer):
         playlist = Playlist.objects.create(created_by=user.username, **validated_data)
 
         for entry_data in entries:
-            PlaylistEntry.objects.create(playlist=playlist, **entry_data)
+            try:
+                PlaylistEntry.objects.create(playlist=playlist, **entry_data)
+            except IntegrityError:
+                raise exceptions.ValidationError(
+                    code="playlist-entry-file-id-or-uri",
+                    detail="playlist entries must either have file id or uri.",
+                )
 
         return playlist
 
@@ -1552,7 +1559,13 @@ class PlaylistSerializer(serializers.ModelSerializer):
                     entry.delete(keep_parents=True)
 
             for entry_data in validated_data.get("entries"):
-                PlaylistEntry.objects.create(playlist=instance, **entry_data)
+                try:
+                    PlaylistEntry.objects.create(playlist=instance, **entry_data)
+                except IntegrityError:
+                    raise exceptions.ValidationError(
+                        code="playlist-entry-file-id-or-uri",
+                        detail="playlist entries must either have file id or uri.",
+                    )
 
         instance.save()
 
-- 
GitLab