From 29354c129e56e7e102e55ece1916eedb78abd672 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Mon, 4 Nov 2024 12:44:14 -0400
Subject: [PATCH] feat: add create method to PlaylistSerializer

---
 program/serializers.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/program/serializers.py b/program/serializers.py
index 726a22d4..bf71dee7 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -1508,3 +1508,22 @@ class PlaylistSerializer(serializers.ModelSerializer):
             "playout_mode",
             "show_id",
         ) + read_only_fields
+
+    def create(self, validated_data):
+        """Create a new Playlist instance, given the validated data."""
+
+        user = self.context["request"].user
+        user_is_owner = user in validated_data.get("show").owners.all()
+
+        # having the create_playlist permission overrules the ownership
+        if not (user.has_perm("program.create_playlist") or user_is_owner):
+            raise exceptions.PermissionDenied(detail="You are not allowed to create a playlist.")
+
+        entries = validated_data.pop("entries", [])
+
+        playlist = Playlist.objects.create(created_by=user.username, **validated_data)
+
+        for entry_data in entries:
+            PlaylistEntry.objects.create(playlist=playlist, **entry_data)
+
+        return playlist
-- 
GitLab