From 25755ad39b6f9dbddf8fd45307a7b4bae1177dd8 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Sun, 22 Jul 2018 11:56:25 +0200 Subject: [PATCH] Fixed #384: unfiltered results in favorites API --- api/funkwhale_api/favorites/filters.py | 15 +++++++++++++++ api/funkwhale_api/favorites/views.py | 3 ++- api/tests/favorites/test_favorites.py | 3 ++- changes/changelog.d/384.bugfix | 1 + front/src/components/favorites/List.vue | 2 +- front/src/store/favorites.js | 7 +++++-- 6 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 api/funkwhale_api/favorites/filters.py create mode 100644 changes/changelog.d/384.bugfix diff --git a/api/funkwhale_api/favorites/filters.py b/api/funkwhale_api/favorites/filters.py new file mode 100644 index 000000000..a355593d9 --- /dev/null +++ b/api/funkwhale_api/favorites/filters.py @@ -0,0 +1,15 @@ +from django_filters import rest_framework as filters + +from funkwhale_api.common import fields + +from . import models + + +class TrackFavoriteFilter(filters.FilterSet): + q = fields.SearchFilter( + search_fields=["track__title", "track__artist__name", "track__album__title"] + ) + + class Meta: + model = models.TrackFavorite + fields = ["user", "q"] diff --git a/api/funkwhale_api/favorites/views.py b/api/funkwhale_api/favorites/views.py index ae47e03f2..dae90ebbd 100644 --- a/api/funkwhale_api/favorites/views.py +++ b/api/funkwhale_api/favorites/views.py @@ -7,7 +7,7 @@ from funkwhale_api.activity import record from funkwhale_api.common import fields, permissions from funkwhale_api.music.models import Track -from . import models, serializers +from . import filters, models, serializers class TrackFavoriteViewSet( @@ -17,6 +17,7 @@ class TrackFavoriteViewSet( viewsets.GenericViewSet, ): + filter_class = filters.TrackFavoriteFilter serializer_class = serializers.UserTrackFavoriteSerializer queryset = ( models.TrackFavorite.objects.all() diff --git a/api/tests/favorites/test_favorites.py b/api/tests/favorites/test_favorites.py index 6ef323db5..0b99c9340 100644 --- a/api/tests/favorites/test_favorites.py +++ b/api/tests/favorites/test_favorites.py @@ -20,8 +20,9 @@ def test_user_can_add_favorite(factories): def test_user_can_get_his_favorites(api_request, factories, logged_in_client, client): r = api_request.get("/") favorite = factories["favorites.TrackFavorite"](user=logged_in_client.user) + factories["favorites.TrackFavorite"]() url = reverse("api:v1:favorites:tracks-list") - response = logged_in_client.get(url) + response = logged_in_client.get(url, {"user": logged_in_client.user.pk}) expected = [ { "user": users_serializers.UserBasicSerializer( diff --git a/changes/changelog.d/384.bugfix b/changes/changelog.d/384.bugfix new file mode 100644 index 000000000..c8920985b --- /dev/null +++ b/changes/changelog.d/384.bugfix @@ -0,0 +1 @@ +Fixed unfiltered results in favorites API (#384) diff --git a/front/src/components/favorites/List.vue b/front/src/components/favorites/List.vue index 71355536e..eacea63ec 100644 --- a/front/src/components/favorites/List.vue +++ b/front/src/components/favorites/List.vue @@ -11,7 +11,7 @@ + :translate-params="{count: results.count}"> 1 favorite diff --git a/front/src/store/favorites.js b/front/src/store/favorites.js index b7e789511..5983d1805 100644 --- a/front/src/store/favorites.js +++ b/front/src/store/favorites.js @@ -53,10 +53,13 @@ export default { toggle ({getters, dispatch}, id) { dispatch('set', {id, value: !getters['isFavorite'](id)}) }, - fetch ({dispatch, state, commit}, url) { + fetch ({dispatch, state, commit, rootState}, url) { // will fetch favorites by batches from API to have them locally + let params = { + user: rootState.auth.profile.id + } url = url || 'favorites/tracks/' - return axios.get(url).then((response) => { + return axios.get(url, {params: params}).then((response) => { logger.default.info('Fetched a batch of ' + response.data.results.length + ' favorites') response.data.results.forEach(result => { commit('track', {id: result.track, value: true})