Skip to content
Snippets Groups Projects
Commit 4796dffa authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Can now filter tracks by favorites

parent f1d0a264
No related branches found
No related tags found
No related merge requests found
...@@ -87,3 +87,15 @@ class TestFavorites(TestCase): ...@@ -87,3 +87,15 @@ class TestFavorites(TestCase):
with self.settings(API_AUTHENTICATION_REQUIRED=False): with self.settings(API_AUTHENTICATION_REQUIRED=False):
response = getattr(self.client, method)(url) response = getattr(self.client, method)(url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_can_filter_tracks_by_favorites(self):
favorite = TrackFavorite.add(self.track, self.user)
url = reverse('api:tracks-list')
self.client.login(username=self.user.username, password='test')
response = self.client.get(url, data={'favorites': True})
parsed_json = json.loads(response.content.decode('utf-8'))
self.assertEqual(parsed_json['count'], 1)
self.assertEqual(parsed_json['results'][0]['id'], self.track.id)
...@@ -14,7 +14,13 @@ class TrackFavoriteViewSet(mixins.CreateModelMixin, ...@@ -14,7 +14,13 @@ class TrackFavoriteViewSet(mixins.CreateModelMixin,
viewsets.GenericViewSet): viewsets.GenericViewSet):
serializer_class = serializers.UserTrackFavoriteSerializer serializer_class = serializers.UserTrackFavoriteSerializer
queryset = models.TrackFavorite.objects.all() queryset = (models.TrackFavorite.objects.all()
.select_related()
.select_related('track__album__artist')
.prefetch_related(
'track__tags',
'track__files',
'track__artist__albums__tracks__tags',))
permission_classes = [ConditionalAuthentication] permission_classes = [ConditionalAuthentication]
...@@ -27,7 +33,7 @@ class TrackFavoriteViewSet(mixins.CreateModelMixin, ...@@ -27,7 +33,7 @@ class TrackFavoriteViewSet(mixins.CreateModelMixin,
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def get_queryset(self): def get_queryset(self):
return models.TrackFavorite.objects.filter(user=self.request.user).select_related('track__album__artist').prefetch_related('track__tags') return self.queryset.filter(user=self.request.user)
def perform_create(self, serializer): def perform_create(self, serializer):
track = Track.objects.get(pk=serializer.data['track']) track = Track.objects.get(pk=serializer.data['track'])
......
...@@ -80,6 +80,16 @@ class TrackViewSet(TagViewSetMixin, SearchMixin, viewsets.ReadOnlyModelViewSet): ...@@ -80,6 +80,16 @@ class TrackViewSet(TagViewSetMixin, SearchMixin, viewsets.ReadOnlyModelViewSet):
search_fields = ['title', 'artist__name'] search_fields = ['title', 'artist__name']
ordering_fields = ('creation_date',) ordering_fields = ('creation_date',)
def get_queryset(self):
queryset = super().get_queryset()
filter_favorites = self.request.GET.get('favorites', None)
user = self.request.user
if user.is_authenticated() and filter_favorites == 'true':
queryset = queryset.filter(track_favorites__user=user)
return queryset
class TagViewSet(viewsets.ReadOnlyModelViewSet): class TagViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Tag.objects.all() queryset = Tag.objects.all()
serializer_class = serializers.TagSerializer serializer_class = serializers.TagSerializer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment