From 7618542de2840358020c48fba43b1ec047c5ba29 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Thu, 7 Nov 2024 15:01:05 -0400
Subject: [PATCH] feat: add playlists/usage route

---
 program/views.py | 25 +++++++++++++++++++++++++
 steering/urls.py |  2 ++
 2 files changed, 27 insertions(+)

diff --git a/program/views.py b/program/views.py
index ea69e683..926289de 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1699,3 +1699,28 @@ class APIPlaylistViewSet(viewsets.ModelViewSet):
         playlist.delete()
 
         return Response(status=status.HTTP_204_NO_CONTENT)
+
+
+class APIPlaylistUsageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
+    serializer_class = PlaylistSerializer
+
+    def get_queryset(self):
+        """The queryset is empty if the request is not authenticated. Otherwise, it contains all
+        the playlists."""
+
+        if not self.request.user.is_authenticated:
+            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)
diff --git a/steering/urls.py b/steering/urls.py
index 194e6993..b2d518ef 100644
--- a/steering/urls.py
+++ b/steering/urls.py
@@ -35,6 +35,7 @@ from program.views import (
     APILinkTypeViewSet,
     APIMusicFocusViewSet,
     APINoteViewSet,
+    APIPlaylistUsageViewSet,
     APIPlaylistViewSet,
     APIProfileViewSet,
     APIProgramBasicViewSet,
@@ -73,6 +74,7 @@ router.register(r"settings", APIRadioSettingsViewSet, basename="settings")
 router.register(r"program/basic", APIProgramBasicViewSet, basename="program-basic")
 router.register(r"program/playout", APIProgramPlayoutViewSet, basename="program-playout")
 router.register(r"program/calendar", APIProgramCalendarViewSet, basename="program-calendar")
+router.register(r"playlists/usage", APIPlaylistUsageViewSet, basename="playlists-usage")
 router.register(r"playlists", APIPlaylistViewSet, basename="playlists")
 
 urlpatterns = [
-- 
GitLab