diff --git a/api/funkwhale_api/favorites/filters.py b/api/funkwhale_api/favorites/filters.py new file mode 100644 index 0000000000000000000000000000000000000000..a355593d91bea643277086fe98d7e81a1653e998 --- /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 ae47e03f251cb5e89972e716c36563d6b3e9f5ca..dae90ebbdcfeb3719a915f125bc26f76208d431b 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 6ef323db50b3eeb4edaaf5c7d97b49a5c3b3ad19..0b99c93409a7ca1eb542fe2607d29a3b54c1293c 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 0000000000000000000000000000000000000000..c8920985bc74d1971df4b5f425198fb37a7990cb --- /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 71355536ede69c74039556b48d75672b072aadf9..eacea63eca01e52b3b96b22d541cac8e6ac623a2 100644 --- a/front/src/components/favorites/List.vue +++ b/front/src/components/favorites/List.vue @@ -11,7 +11,7 @@ <translate translate-plural="%{ count } favorites" :translate-n="$store.state.favorites.count" - :translate-params="{count: $store.state.favorites.count}"> + :translate-params="{count: results.count}"> 1 favorite </translate> </h2> diff --git a/front/src/store/favorites.js b/front/src/store/favorites.js index b7e789511217726e74412591d18233e6d25ed762..5983d18051fe2f519ca3b0ac7454a148af0aea2c 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})