diff --git a/program/views.py b/program/views.py index ea69e683240bfe9027e0ccd134130fc5100628c3..926289de1d7d086fbde5a005893f2078ce5a6a28 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 194e6993d94c3ed7a94821cca7c677752fda9d7f..b2d518efaba60c12c4c9dad0a1183859250430d0 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 = [