From cf2f8602940fbad609161f70bbe399b09f4792f0 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Thu, 7 Nov 2024 19:03:48 -0400
Subject: [PATCH] refactor: introduce PlaylistFileUsageFilter

---
 program/filters.py | 11 +++++++++++
 program/views.py   | 13 +------------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/program/filters.py b/program/filters.py
index d442c2ac..656d4804 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -334,3 +334,14 @@ class VirtualTimeslotFilterSet(filters.FilterSet):
     class Meta:
         model = models.TimeSlot
         fields = ["start", "end", "include_virtual"]
+
+
+class PlaylistFileUsageFilter(filters.FilterSet):
+    file_id = filters.NumberFilter(
+        field_name="entries__file_id",
+        help_text="Return only playlists that use to the specified file ID.",
+    )
+
+    class Meta:
+        fields = ("file_id",)
+        model = models.Playlist
diff --git a/program/views.py b/program/views.py
index edc0b304..deb1577e 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1700,6 +1700,7 @@ class APIPlaylistViewSet(viewsets.ModelViewSet):
 
 
 class APIPlaylistUsageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
+    filterset_class = filters.PlaylistFileUsageFilter
     serializer_class = PlaylistSerializer
 
     def get_queryset(self):
@@ -1710,15 +1711,3 @@ class APIPlaylistUsageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
             return Playlist.objects.none()
 
         return Playlist.objects.all()
-
-    def list(self, request, *args, **kwargs):
-        """The list filters the playlists by the `file_id` they refer to."""
-
-        if file_id := request.query_params.get("file_id"):
-            queryset = self.get_queryset().filter(entries__file_id=int(file_id))
-        else:
-            queryset = self.get_queryset()
-
-        serializer = PlaylistSerializer(queryset, many=True)
-
-        return Response(serializer.data)
-- 
GitLab