diff --git a/vrobbler/apps/scrobbles/api/filters.py b/vrobbler/apps/scrobbles/api/filters.py new file mode 100644 index 0000000..5ec3ff6 --- /dev/null +++ b/vrobbler/apps/scrobbles/api/filters.py @@ -0,0 +1,29 @@ +import django_filters +from scrobbles.constants import Visibility +from scrobbles.models import Scrobble + + +class ScrobbleFilter(django_filters.FilterSet): + media_type = django_filters.ChoiceFilter(choices=Scrobble.MediaType.choices) + visibility = django_filters.ChoiceFilter(choices=Visibility.choices) + in_progress = django_filters.BooleanFilter() + played_to_completion = django_filters.BooleanFilter() + source = django_filters.CharFilter(lookup_expr="icontains") + timestamp_after = django_filters.DateTimeFilter( + field_name="timestamp", lookup_expr="gte" + ) + timestamp_before = django_filters.DateTimeFilter( + field_name="timestamp", lookup_expr="lte" + ) + + class Meta: + model = Scrobble + fields = [ + "media_type", + "visibility", + "in_progress", + "played_to_completion", + "source", + "timestamp_after", + "timestamp_before", + ] diff --git a/vrobbler/apps/scrobbles/api/views.py b/vrobbler/apps/scrobbles/api/views.py index 575fba1..e11cd57 100644 --- a/vrobbler/apps/scrobbles/api/views.py +++ b/vrobbler/apps/scrobbles/api/views.py @@ -3,6 +3,7 @@ from logging import getLogger from rest_framework import permissions, viewsets from rest_framework.decorators import action from rest_framework.response import Response +from scrobbles.api.filters import ScrobbleFilter from scrobbles.api.serializers import ( AudioScrobblerTSVImportSerializer, KoReaderImportSerializer, @@ -23,6 +24,7 @@ class ScrobbleViewSet(viewsets.ModelViewSet): queryset = Scrobble.objects.all().order_by("-timestamp") serializer_class = ScrobbleSerializer permission_classes = [permissions.IsAuthenticated] + filterset_class = ScrobbleFilter def get_queryset(self): return super().get_queryset().filter(user=self.request.user)