From bf6fe44bedc078821078c5ca7039ee3a5397b3c6 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Wed, 21 Mar 2018 11:58:11 +0100
Subject: [PATCH] More filters / ordering option on playlist API

---
 api/funkwhale_api/playlists/filters.py | 9 +++++++++
 api/funkwhale_api/playlists/views.py   | 4 ++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/api/funkwhale_api/playlists/filters.py b/api/funkwhale_api/playlists/filters.py
index cf8e7dd214..bc49415100 100644
--- a/api/funkwhale_api/playlists/filters.py
+++ b/api/funkwhale_api/playlists/filters.py
@@ -1,13 +1,22 @@
 from django_filters import rest_framework as filters
 
+from funkwhale_api.music import utils
+
 from . import models
 
 
 
 class PlaylistFilter(filters.FilterSet):
+    q = filters.CharFilter(name='_', method='filter_q')
 
     class Meta:
         model = models.Playlist
         fields = {
             'user': ['exact'],
+            'name': ['exact', 'icontains'],
+            'q': 'exact',
         }
+
+    def filter_q(self, queryset, name, value):
+        query = utils.get_query(value, ['name', 'user__username'])
+        return queryset.filter(query)
diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py
index 5de6067ffe..4880b1886d 100644
--- a/api/funkwhale_api/playlists/views.py
+++ b/api/funkwhale_api/playlists/views.py
@@ -8,15 +8,14 @@ from rest_framework.decorators import detail_route
 from rest_framework.response import Response
 from rest_framework.permissions import IsAuthenticatedOrReadOnly
 
-from funkwhale_api.music.models import Track
 from funkwhale_api.common import permissions
 from funkwhale_api.common import fields
+from funkwhale_api.music.models import Track
 
 from . import filters
 from . import models
 from . import serializers
 
-
 class PlaylistViewSet(
         mixins.RetrieveModelMixin,
         mixins.CreateModelMixin,
@@ -37,6 +36,7 @@ class PlaylistViewSet(
     ]
     owner_checks = ['write']
     filter_class = filters.PlaylistFilter
+    ordering_fields = ('id', 'name', 'creation_date', 'modification_date')
 
     def get_serializer_class(self):
         if self.request.method in ['PUT', 'PATCH', 'DELETE', 'POST']:
-- 
GitLab